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

James E. King, III commented on THRIFT-3228:
--------------------------------------------

You can use boost::once to properly initialize something once and only once in 
a thread-safe manner that is portable.

Tip: You can make something non-copyable by having it inherit from 
boost::noncopyable instead of declaring the copy constructor and assignment 
operator explicitly.

> Fix TAutoOverlapThread may reference released memory
> ----------------------------------------------------
>
>                 Key: THRIFT-3228
>                 URL: https://issues.apache.org/jira/browse/THRIFT-3228
>             Project: Thrift
>          Issue Type: Bug
>          Components: C++ - Library
>    Affects Versions: 0.9.2
>            Reporter: Paweł Janicki
>            Priority: Critical
>         Attachments: 
> 0001-THRIFT-3228.-cpp-Fix-TAutoOverlapThread-may-referenc.patch, 
> ConsoleApplication1.cpp
>
>
> A released memory may be referenced by TAutoEverlapThread in case there 
> exists a global instance of TPipeServer or TNamedPipeServer or 
> TAutoOverlapThread in compilation module other than 
> src\lib\cpp\src\thrift\windows\OverlappedSubmissionThread.cpp
> TPipeServer on listen() instantiates TNamedPipeServer which instantiates 
> TAutoOverlapThread. The TAutoOverlapThread calls in it's d-tor a static 
> function TOverlappedSubmissionThread::release_instance(). This static 
> functions refers to global variable "TCriticalSection 
> TOverlappedSubmissionThread::instanceGuard_" defined in 
> src\lib\cpp\src\thrift\windows\OverlappedSubmissionThread.cpp.
> As the d-tion of globar variable is undefined across compilation modules it 
> may happen that if user defined global variable holding reference to
> TPipeServer, the instanceGuard_ can be freed by CRT before call to 
> TPipeServer d-tor, which will reference deleted global variable 
> instanceGuard_.
> This is because of incorrect implementation of singleton pattern of 
> TOverlappedSubmissionThread.



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

Reply via email to