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 479f24525bd106277699797d791e9f89af1994c1..53ad1e901c8d41187d3e588c95b8cd72161ea290 100644 (file)
@@ -208,9 +208,11 @@ class ApplicationController < ActionController::Base
   end
 
   def api_call_timeout
   end
 
   def api_call_timeout
-    Timeout::timeout(APP_CONFIG['api_timeout'], OSM::APITimeoutError) do
+    SystemTimer.timeout_after(APP_CONFIG['api_timeout']) do
       yield
     end
       yield
     end
+  rescue Timeout::Error
+    raise OSM::APITimeoutError
   end
 
   ##
   end
 
   ##
index 96cec39437150ee4a43e223734b7512ce39a131d..5c7912d154ec12a73769c6a41d8ee9de4e5021db 100644 (file)
@@ -81,7 +81,7 @@ class BrowseController < ApplicationController
 private
 
   def timeout
 private
 
   def timeout
-    Timeout::timeout(30) do
+    SystemTimer.timeout_after(30) do
       yield
     end
   rescue Timeout::Error
       yield
     end
   rescue Timeout::Error
index 4493d07a43359b5c37d2f1a8269aad00b2260796..727ab2d46cb2d9ef28c3c87f84b2cfdc3ab12a2a 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 '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.
 
   # Only load the plugins named here, in the order given. By default, all plugins 
   # in vendor/plugins are loaded in alphabetical order.