[
https://issues.apache.org/jira/browse/THRIFT-1149?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alex updated THRIFT-1149:
-------------------------
Attachment: nonblocking_fix.diff
> Nonblocking server fails when client connection is reset
> --------------------------------------------------------
>
> Key: THRIFT-1149
> URL: https://issues.apache.org/jira/browse/THRIFT-1149
> Project: Thrift
> Issue Type: Bug
> Components: Ruby - Library
> Affects Versions: 0.6
> Environment: FreeBSD orion 8.2-RELEASE FreeBSD 8.2-RELEASE #19
> r220462: Fri Apr 8 22:24:26 EDT 2011
> alex@orion:/usr/obj/usr/src/sys/ORION amd64
> Ruby 1.9.2
> Reporter: Alex
> Labels: nonblocking, patch
> Attachments: nonblocking_fix.diff
>
>
> I've attempted to stress test the nonblocking server by writing a client
> which connects to said server and executes three operations as fast as
> possible in an infinite loop. I've found that if I kill the client (ctrl +
> C), an intermittent problem occurs where the server will stop accepting new
> connections from clients. In the case of multiple clients already connected,
> they are immediately disconnected.
> I've tracked the bug down to the run method in nonblocking_server.rb,
> specifically the "if fd.handle.eof?" statement (around line 150). Under
> certain conditions executing this line will cause Errno::ECONNRESET to be
> raised. As such, the "@shutdown_queue.push :shutdown" statement is executed,
> which accounts for the behavior I am seeing. The attached patch rescues such
> an error and removes the connection. I am not sure if this is the best way to
> do it, however it solves the problem for me.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira