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

Christopher Friedt commented on THRIFT-5677:
--------------------------------------------

PR is [https://github.com/apache/thrift/pull/2745] (currently in draft)

> lib: cpp: transport: file descriptor leak in TServerSocket::close()
> -------------------------------------------------------------------
>
>                 Key: THRIFT-5677
>                 URL: https://issues.apache.org/jira/browse/THRIFT-5677
>             Project: Thrift
>          Issue Type: Bug
>          Components: C++ - Library
>    Affects Versions: 0.12.0, 0.13.0, 0.14.0, 0.15.0, 0.14.1, 0.14.2, 0.16.0, 
> 0.17.0
>         Environment: See description above.
>            Reporter: Christopher Friedt
>            Priority: Blocker
>              Labels: file-descriptor-leak, regression
>         Attachments: socketpair_close_fcntl_test.c, 
> thrift-zephyr-tsocketserver-close-fd-fixed.txt, 
> thrift-zephyr-tsocketserver-close-fd-leak.patch, 
> thrift-zephyr-tsocketserver-close-fd-leak.txt
>
>
> It would appear that there is a possible file descriptor leak in 
> TServerSocket.cpp
> This was discovered in the final stages of porting Thrift to the Zephyr RTOS.
> In the context of integration testing with the ThriftTest.thrift sample, and 
> specifically for the TSSLServerSocket, I was able to isolate the file 
> descriptor leak to TServerSocket::close() with some basic printk debugging. 
> Specifically, pChildInterruptSockReader_.reset() is called without first 
> closing a possible underlying file descriptor.
> As an IoT / microcontroller RTOS, Zephyr typically runs on devices with very 
> little in the way of resources (RAM, ROM, CPU frequency, etc). Like 
> everything else, Zephyr's POSIX subsystem has a limit on the maximum number 
> of open file descriptors.
> On large-scale operating systems, leaked file descriptors may be garbage 
> collected after some time (certainly when a process dies). However, on 
> RTOSes, that may not be the case.
> It's possible that there was some assumption made about socketpair() and 
> whether closing one side of the socketpair closes the other. It does not, and 
> there is no stipulation anywhere in the POSIX standard that says that is the 
> case. To validate that, I wrote a small test for POSIX systems (attached) and 
> verified that it supports the aforementioned on both Linux and macOS. As the 
> POSIX subsystem maintainer for Zephyr and author of Zephyr's socketpair() 
> implementation, I am intimately familiar with the nuances of socketpair() and 
> related POSIX API.
> It would appear that this regression was introduced in commit 
> 1684c429501e9df9387cb518e660691f032d7926 in 2015.
> *THIS SHOULD PROBABLY BE PATCHED ASAP AS THRIFT IS TO BE INCLUDED IN THE 
> ZEPHYR V3.3 RELEASE*
> I'll make a PR on GitHub and link back to this issue.
> CC [~jensg] 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to