You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Claudius Heine (JIRA)" <ji...@apache.org> on 2015/07/03 10:05:04 UTC

[jira] [Comment Edited] (THRIFT-1522) TServerSocket potential memory leak with addrinfo *res0

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

Claudius Heine edited comment on THRIFT-1522 at 7/3/15 8:04 AM:
----------------------------------------------------------------

I would say your assessment of the memory leak is correct.
It is never deallocated when an exception is thrown or it has to open a Unix Domain Socket.
The memory leak is present in the current commit in the master branch (5cf9d7744c41).
IMO the best solution would be, to wrap getaddrinfo and freeaddrinfo into a class that calls the methods with its con/destructors.


was (Author: cmhe):
I would say your assessment of the memory leak is correct.
It is never allocated when an exception is thrown or it has to open a Unix Domain Socket.
The memory leak is present in the current commit in the master branch (5cf9d7744c41).
IMO the best solution would be, to wrap getaddrinfo and freeaddrinfo into a class that calls the methods with its con/destructors.

> TServerSocket potential memory leak with addrinfo *res0
> -------------------------------------------------------
>
>                 Key: THRIFT-1522
>                 URL: https://issues.apache.org/jira/browse/THRIFT-1522
>             Project: Thrift
>          Issue Type: Bug
>          Components: C++ - Library
>    Affects Versions: 0.8
>         Environment: Unix, Windows
>            Reporter: Peace C
>            Priority: Minor
>              Labels: TServerSocket, leak, memory, thrift
>             Fix For: 1.0
>
>
> I noticed a potential memory leak in TServerSocket.cpp. The res0 pointer receives an allocation from getaddrinfo() but is only freed part of the time in a conditional branch. It should be outside of the if-else to ensure it's deallocated every time.
> I'm holding off on creating a patch in case I'm not understanding some hidden functionality in the socket library. Here is the code snippet:
>   struct addrinfo *res0;
>   ...
>   getaddrinfo(NULL, port, &hints, &res0);
>   ...
>   if (! path_.empty())
>   { ... }
>   else
>   {
>     ...
>     freeaddrinfo(res0); //Line 331 of TServerSocket.cpp
>   }



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