On Thu, Nov 26, 2009 at 2:28 PM, Arvind Sundararajan <[email protected]> wrote:
> I am encountering a bug while using TNonblockingServer on a service
> with both oneway requests and synchronous requests.
>
> The implementation seems to start constructing a message in response
> to a oneway request and then gives up once it realizes it is a oneway
> request
>
>  def ready(self, all_ok, message):
>
> ....
>        self.message = struct.pack('!i', len(message)) + message
>        if len(message) == 0:
>            # it was a oneway request, do not write answer
>            self.status = WAIT_LEN
>
> On subsequent requests, I then get
>
> [TNonblockingServer.py :113 ] - 2009-11-26 13:58:01,829 - ERROR -
> can't read frame size from socket
>
> because len(self.message) == 4 and _read_len is very defensive about
> reading only the exact right amount of data from the socket.
>
> My patch is simple and seems to fix the problem:
>
>> svn diff
> Index: lib/py/src/server/TNonblockingServer.py
> ===================================================================
> --- lib/py/src/server/TNonblockingServer.py     (revision 884669)
> +++ lib/py/src/server/TNonblockingServer.py     (working copy)
> @@ -182,6 +182,7 @@
>         if len(message) == 0:
>             # it was a oneway request, do not write answer
>             self.status = WAIT_LEN
> +            self.message = ''
>         else:
>             self.status = SEND_ANSWER
>         self.wake_up()
>
> Could someone work with me to commit this?
>
> Arvind.
>

Reply via email to