# 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