# File lib/rumai/ixp/transport.rb, line 96 def talk aRequest # send the messsage ticket = aRequest.tag = @tagPool.obtain @sendLock.synchronize do @stream << aRequest.to_9p end # receive the response while true # check for *my* response in the bucket if response = @recvLock.synchronize { @responses.delete ticket } @tagPool.release ticket if response.is_a? Rerror raise Error, "#{response.ename.inspect} in response to #{aRequest.inspect}" else return response end # put the next response into the bucket else @recvLock.synchronize do response = Fcall.from_9p @stream @responses[response.tag] = response end end end end