Uploaded image for project: 'MINA'
  1. MINA
  2. DIRMINA-1037

Throw exception in NioProcessor.write if the session is closing

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.0.13
    • Fix Version/s: 2.0.14
    • Component/s: Core, Protocol - HTTP, Transport
    • Labels:
      None
    • Environment:
      Windows Server 2012 R2
      mina-core 2.0.13
    • Flags:
      Patch

      Description

      There seems to be a race condition where NioProcessor.write() can be called after the session has been marked as closing. This causes the session to remain open indefinitely, because it is waiting to finish writing before it closes. Over time, this causes memory issues as the number of sessions stuck open grows indefinitely (particularly because these sessions are using SSL).

      I'm attaching a patch that fixes the problem. It simply throws an exception if the session is already marked as closing when write() is called.

      This only seems to be an issue on Windows; I can't reproduce it on Unix systems. It also involves a problematic client that sends a RST packet as soon as it's done sending data to our HTTPS server; this sometimes causes the session to start closing before all of the data has been received.

        Activity

        Hide
        elecharny Emmanuel Lecharny added a comment -

        Thanks for the patch. We fixed the issue differently, by closing the channel immediately when we get an exception. See DIRMINA-1021

        Show
        elecharny Emmanuel Lecharny added a comment - Thanks for the patch. We fixed the issue differently, by closing the channel immediately when we get an exception. See DIRMINA-1021

          People

          • Assignee:
            Unassigned
            Reporter:
            dheath Dave Heath
          • Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development