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.
>