diff options
author | Louise Crow <louise.crow@gmail.com> | 2013-04-24 16:01:39 +0100 |
---|---|---|
committer | Louise Crow <louise.crow@gmail.com> | 2013-04-24 16:01:39 +0100 |
commit | d3eec6f983f8524e28e8ffe42ba3a10efaa0a30e (patch) | |
tree | 4c9cd3a9709a18a46d179e4af63bc7bcfa117b66 /app/models/info_request.rb | |
parent | cc3da49bc927175a49d7150b98d762f65e143d21 (diff) | |
parent | d3aae5cc48c92473e06b2104bb9431305d5a92f0 (diff) |
Merge branch 'release/0.9' into rails-3-develop
Conflicts:
Gemfile.lock
app/controllers/public_body_controller.rb
app/mailers/track_mailer.rb
app/views/request/_hidden_correspondence.html.erb
app/views/request/_sidebar.html.erb
app/views/request/hidden.html.erb
app/views/request/new_please_describe.html.erb
app/views/request/preview.html.erb
app/views/user/show.html.erb
config/environment.rb
config/routes.rb
spec/controllers/public_body_controller_spec.rb
Diffstat (limited to 'app/models/info_request.rb')
-rw-r--r-- | app/models/info_request.rb | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/app/models/info_request.rb b/app/models/info_request.rb index 156399b99..cf1af0e87 100644 --- a/app/models/info_request.rb +++ b/app/models/info_request.rb @@ -478,6 +478,17 @@ public incoming_message = IncomingMessage.new ActiveRecord::Base.transaction do + + # To avoid a deadlock when simultaneously dealing with two + # incoming emails that refer to the same InfoRequest, we + # lock the row for update. In Rails 3.2.0 and later this + # can be done with info_request.with_lock or + # info_request.lock!, but upgrading to that version of + # Rails creates many other problems at the moment. In the + # interim, just use raw SQL to do the SELECT ... FOR UPDATE + raw_sql = "SELECT * FROM info_requests WHERE id = #{self.id} LIMIT 1 FOR UPDATE" + ActiveRecord::Base.connection.execute(raw_sql) + raw_email = RawEmail.new incoming_message.raw_email = raw_email incoming_message.info_request = self |