plugin treeview: fix crash
When the max_project_files is set to a higher value than the allowed system maximum file descriptors, and opening a project directory that causes dirmonitor to open a watch on a lot of files or directories, at least on MacOSX it causes all system.* file functions to return nil (for too many opened files) which breaks the project files scan.
This commit is contained in:
parent
3c682512e7
commit
173dd3aeb4
|
@ -153,28 +153,30 @@ function TreeView:each_item()
|
|||
count_lines = count_lines + 1
|
||||
y = y + h
|
||||
local i = 1
|
||||
while i <= #dir.files and dir_cached.expanded do
|
||||
local item = dir.files[i]
|
||||
local cached = self:get_cached(dir, item, dir.name)
|
||||
if dir.files then -- if consumed max sys file descriptors this can be nil
|
||||
while i <= #dir.files and dir_cached.expanded do
|
||||
local item = dir.files[i]
|
||||
local cached = self:get_cached(dir, item, dir.name)
|
||||
|
||||
coroutine.yield(cached, ox, y, w, h)
|
||||
count_lines = count_lines + 1
|
||||
y = y + h
|
||||
i = i + 1
|
||||
coroutine.yield(cached, ox, y, w, h)
|
||||
count_lines = count_lines + 1
|
||||
y = y + h
|
||||
i = i + 1
|
||||
|
||||
if not cached.expanded then
|
||||
if cached.skip then
|
||||
i = cached.skip
|
||||
else
|
||||
local depth = cached.depth
|
||||
while i <= #dir.files do
|
||||
if get_depth(dir.files[i].filename) <= depth then break end
|
||||
i = i + 1
|
||||
if not cached.expanded then
|
||||
if cached.skip then
|
||||
i = cached.skip
|
||||
else
|
||||
local depth = cached.depth
|
||||
while i <= #dir.files do
|
||||
if get_depth(dir.files[i].filename) <= depth then break end
|
||||
i = i + 1
|
||||
end
|
||||
cached.skip = i
|
||||
end
|
||||
cached.skip = i
|
||||
end
|
||||
end
|
||||
end -- while files
|
||||
end -- while files
|
||||
end
|
||||
end -- for directories
|
||||
self.count_lines = count_lines
|
||||
end)
|
||||
|
|
Loading…
Reference in New Issue