diff --git a/src/library/title.cr b/src/library/title.cr index fb2d2fe..1a8d488 100644 --- a/src/library/title.cr +++ b/src/library/title.cr @@ -115,6 +115,7 @@ class Title previous_entries_size = @entries.size @entries.select! do |entry| existence = File.exists? entry.zip_path + yield_process_file context context["deleted_entry_ids"] << entry.id unless existence existence end diff --git a/src/library/types.cr b/src/library/types.cr index eb87545..1355fcd 100644 --- a/src/library/types.cr +++ b/src/library/types.cr @@ -140,3 +140,8 @@ alias ExamineContext = NamedTuple( deleted_title_ids: Array(String), deleted_entry_ids: Array(String) ) + +def yield_process_file(context : ExamineContext) + context["file_count"] += 1 + Fiber.yield if context["file_count"] % 1000 == 0 +end diff --git a/src/util/signature.cr b/src/util/signature.cr index c4104fe..d0a55a6 100644 --- a/src/util/signature.cr +++ b/src/util/signature.cr @@ -56,6 +56,7 @@ class Dir # directories) def self.contents_signature(dirname, cache = {} of String => String) : String return cache[dirname] if !cache.nil? && cache[dirname]? + Fiber.yield # Yield first signatures = [] of String self.open dirname do |dir| dir.entries.sort.each do |fn|