<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -19,6 +19,7 @@ require 'socket'
 require 'fcntl'
 require 'yaml'
 require 'set'
+require 'thread'
 require 'beanstalk-client/errors'
 require 'beanstalk-client/job'
 
@@ -27,6 +28,7 @@ module Beanstalk
     attr_reader :addr
 
     def initialize(addr, default_tube=nil)
+      @mutex = Mutex.new
       @waiting = false
       @addr = addr
       connect
@@ -80,6 +82,7 @@ module Beanstalk
 
     def reserve(timeout=nil)
       raise WaitingForJobError if @waiting
+      @mutex.lock
       if timeout.nil?
         @socket.write(&quot;reserve\r\n&quot;)
       else
@@ -97,6 +100,8 @@ module Beanstalk
       end
 
       Job.new(self, *read_job('RESERVED'))
+    ensure
+      @mutex.unlock
     end
 
     def delete(id)
@@ -173,10 +178,13 @@ module Beanstalk
 
     def interact(cmd, rfmt)
       raise WaitingForJobError if @waiting
+      @mutex.lock
       @socket.write(cmd)
       return read_yaml('OK') if rfmt == :yaml
       return found_job if rfmt == :job
       check_resp(*rfmt)
+    ensure
+      @mutex.unlock
     end
 
     def get_resp()</diff>
      <filename>lib/beanstalk-client/connection.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>722ce009bba3a9defd20f9b83ee3057ee2c3876a</id>
    </parent>
  </parents>
  <author>
    <name>Martyn Loughran</name>
    <email>me@mloughran.com</email>
  </author>
  <url>http://github.com/mloughran/beanstalk-client-ruby/commit/0d7b71f463f213b1b4cbcf0fdc214882521e88c6</url>
  <id>0d7b71f463f213b1b4cbcf0fdc214882521e88c6</id>
  <committed-date>2009-10-27T10:51:08-07:00</committed-date>
  <authored-date>2009-10-27T10:51:08-07:00</authored-date>
  <message>Wrap per connection mutex around integrations with socket to make thread safe</message>
  <tree>7e9f9b5b0ba4bb09910b46e32287fad9729497eb</tree>
  <committer>
    <name>Martyn Loughran</name>
    <email>me@mloughran.com</email>
  </committer>
</commit>
