Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-4283

TNamedPipeServer race condition in interrupt

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 0.10.0
    • 0.11.0
    • C++ - Library
    • Windows

    • Patch Available

    Description

      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.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            jking3 James E. King III
            JNG Jean-Noël Goor
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment