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

ListeningSockets::closeAll should not cause an invariant if we are not inShutdown

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 3.3.4
    • Component/s: Networking
    • Labels:
      None
    • Backwards Compatibility:
      Fully Compatible
    • Operating System:
      ALL
    • Steps To Reproduce:
      Hide

      Run scoped_db_conn_test on Windows.

      Show
      Run scoped_db_conn_test on Windows.
    • Sprint:
      Platforms 12 (04/01/16)
    • Linked BF Score:
      0

      Description

      On linux, if the listen socket is closed and we get an error from select, we just let the thread driving the Listener fall out of the loop in Listener::initAndListen:

      https://github.com/mongodb/mongo/blob/c2b1e28fd15a4400cbb311057ef33a2120f1e6e2/src/mongo/util/net/listen.cpp#L290

      But, on Windows, if we find that the listening socket has closed, we fassertFailed.

      This means that on Windows, it is impossible to get the thread out of initAndListen without terminating the process via fassertFailed without first calling shutdown().

      This makes it hard to write reasonable tests that need to use a listener, like scoped_db_conn_test. We can't call shutdown or shutdownNoTerminate because after that happens, we are always in a shutdown state and can't start a new listener.

      The Windows version of initAndListen should work more like the non-windows version: if WSAEventSelect fails, and we are not in shutdown, log an error and let the thread return. If we are in shutdown, just return.

      https://github.com/mongodb/mongo/blob/c2b1e28fd15a4400cbb311057ef33a2120f1e6e2/src/mongo/util/net/listen.cpp#L463

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              acm Andrew Morrow
              Reporter:
              acm Andrew Morrow
              Participants:
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: