Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-37717

Race between Baton::notify() and Waitable::wait()

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Fixed
    • Affects Version/s: 4.0.0, 4.1.4
    • Fix Version/s: 4.0.5, 4.1.6
    • Component/s: Networking
    • Labels:
      None

      Description

      If notify() is called after the Baton's run() method does its final check of the queue and the point where wait() relocks the mutex, it will push an empty task to the queue which won't have a chance to run before the Baton is detached from the OperationContext. This causes an invariant failure when detach() asserts that the queue is empty.

      This race also exists in 4.0 with a larger window: any time the operation is killed between the last call to run() and the call to detach().

      The fix for both branches will be to not schedule the empty task on killop and instead just always tap the event fd.

      Until this is fixed, it can be worked around by setting the AsyncRequestsSenderUseBaton server parameter to false.

        Attachments

          Activity

            People

            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: