commit 997bf6b17f13424b67c66e082e1eceba3d37cd8a
parent 56fac5b07c8beb0b6a4707f6a7f36c93ff307e1d
Author: William Morgan <wmorgan-sup@masanjin.net>
Date: Wed, 25 Mar 2009 05:36:24 -0700
Merge branch 'background-save' into next
Diffstat:
1 file changed, 21 insertions(+), 9 deletions(-)
diff --git a/lib/sup/modes/thread-index-mode.rb b/lib/sup/modes/thread-index-mode.rb
@@ -69,6 +69,8 @@ EOS
UpdateManager.register self
+ @save_thread_mutex = Mutex.new
+
@last_load_more_size = nil
to_load_more do |size|
next if @last_load_more_size == 0
@@ -459,15 +461,25 @@ EOS
BufferManager.flash "#{threads.size.pluralize 'Thread'} killed."
end
- def save
- BufferManager.say("Saving contacts...") { ContactManager.instance.save }
- dirty_threads = @mutex.synchronize { (@threads + @hidden_threads.keys).select { |t| t.dirty? } }
- return if dirty_threads.empty?
+ def save background=true
+ if background
+ Redwood::reporting_thread("saving thread") { actually_save }
+ else
+ actually_save
+ end
+ end
+
+ def actually_save
+ @save_thread_mutex.synchronize do
+ BufferManager.say("Saving contacts...") { ContactManager.instance.save }
+ dirty_threads = @mutex.synchronize { (@threads + @hidden_threads.keys).select { |t| t.dirty? } }
+ next if dirty_threads.empty?
- BufferManager.say("Saving threads...") do |say_id|
- dirty_threads.each_with_index do |t, i|
- BufferManager.say "Saving modified thread #{i + 1} of #{dirty_threads.length}...", say_id
- t.save Index
+ BufferManager.say("Saving threads...") do |say_id|
+ dirty_threads.each_with_index do |t, i|
+ BufferManager.say "Saving modified thread #{i + 1} of #{dirty_threads.length}...", say_id
+ t.save Index
+ end
end
end
end
@@ -481,7 +493,7 @@ EOS
sleep 0.1 # TODO: necessary?
BufferManager.erase_flash
end
- save
+ save false
super
end