[ 
https://issues.apache.org/jira/browse/THRIFT-2789?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14232093#comment-14232093
 ] 

Sergey commented on THRIFT-2789:
--------------------------------

Patch that Qiao uploaded will fix the problem. My original patch will also fix 
couple of other places in code where same problem could potentially occur (yet, 
didn't).

All my hesitation is that closing connection on EAGAIN error seems overly 
harsh, yet I don't see any other way to handle that (and keep server truly 
nonblocking). I.e. while it certainly fixes the resource leak and improves 
overall state, I can't call it a complete fix.

> TNonblockingServer leaks socket FD's under load
> -----------------------------------------------
>
>                 Key: THRIFT-2789
>                 URL: https://issues.apache.org/jira/browse/THRIFT-2789
>             Project: Thrift
>          Issue Type: Bug
>          Components: C++ - Library
>            Reporter: Sergey
>         Attachments: 
> 0001-Close-connection-when-failed-to-notify-IO-thread.patch, D10015.diff
>
>
> I checked 0.9.2 and 1.0, but code didn't seem to change in 1.2 either.
> Problem is that network threads and worker threads use non-blocking socket 
> (pipe) to communicate. Under heavy load writes to that pipe might fail with 
> EAGAIN. While 'notifyIOThread' method carefully checks for the error and 
> communicates the result via return value, not all callers check result of 
> 'notify'.
> Generally it's hard to tell what appropriate handling of such a failure would 
> be, but it's clear sockets shouldn't leak. Please use attached patch for the 
> reference, but I do not insist what I did there is the best way to fix the 
> problem.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to