Use system_timer for timeouts to make them more reliable.
authorTom Hughes <tom@compton.nu>
Mon, 11 Jan 2010 09:28:31 +0000 (09:28 +0000)
committerTom Hughes <tom@compton.nu>
Mon, 11 Jan 2010 09:28:31 +0000 (09:28 +0000)
app/controllers/application_controller.rb
app/controllers/browse_controller.rb
config/environment.rb

index 479f245..53ad1e9 100644 (file)
@@ -208,9 +208,11 @@ class ApplicationController < ActionController::Base
   end
 
   def api_call_timeout
-    Timeout::timeout(APP_CONFIG['api_timeout'], OSM::APITimeoutError) do
+    SystemTimer.timeout_after(APP_CONFIG['api_timeout']) do
       yield
     end
+  rescue Timeout::Error
+    raise OSM::APITimeoutError
   end
 
   ##
index 96cec39..5c7912d 100644 (file)
@@ -81,7 +81,7 @@ class BrowseController < ApplicationController
 private
 
   def timeout
-    Timeout::timeout(30) do
+    SystemTimer.timeout_after(30) do
       yield
     end
   rescue Timeout::Error
index 4493d07..727ab2d 100644 (file)
@@ -52,6 +52,7 @@ Rails::Initializer.run do |config|
   config.gem 'rmagick', :lib => 'RMagick'
   config.gem 'oauth', :version => '>= 0.3.6'
   config.gem 'httpclient'
+  config.gem 'system_timer'
 
   # Only load the plugins named here, in the order given. By default, all plugins 
   # in vendor/plugins are loaded in alphabetical order.