Jean-Noël Goor created THRIFT-4283:
--------------------------------------
Summary: TNamedPipeServer race condition in interrupt
Key: THRIFT-4283
URL: https://issues.apache.org/jira/browse/THRIFT-4283
Project: Thrift
Issue Type: Bug
Components: C++ - Library
Affects Versions: 0.10.0
Environment: Windows
Reporter: Jean-Noël Goor
In TNamedPipeServer, there exists a race condition between the 'serve' thread
and another thread that would attempt to interrupt it.
While the 'serve' thread is waiting for clients to connect, it is blocked on a
GetOverlappedResult call.
To stop the server, another thread calls the interrupt function that submits a
CANCELIO operation to the TOverlappedSubmissionThread.
The ::CancelIo function is called, freeing the 'serve' thread with an
unsuccessful OvelappedResult which then throws and terminate the server by
deleting the serverTransport_.
All this can happen while the call to interrupt has not yet returned, and even
the event signaling the execution of the CANCELIO request might not have been
caught.
In our code, this result in unpredictable behavior (mostly detected as stalled).
It is very hard to reproduce in test environment as it consists in a running
threads race condition.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)