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

A call to session.closed(true) may still flush messages.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.0.11
    • 2.0.14
    • Core
    • None

    Description

      If we call for a session.close(true), we expect the session not to write any messages into the socket.

      This is not what happen. The close(true) call just adds the session into the IoProcessor.removedSession queue, and continue to proceed with flush before processing the session removal.

      Typically, if the session is being closed in a IoHandler.messageReceived(), then it comes form the process() method call, which is :

          private void process(S session) {
              // Process Reads
              if (isReadable(session) && !session.isReadSuspended()) {
                  read(session);
              }
      
              // Process writes
              if (isWritable(session) && !session.isWriteSuspended()) {
                  // add the session to the queue, if it's not already there
                  if (session.setScheduledForFlush(true)) {
                      flushingSessions.add(session);
                  }
              }
          }
      

      At this point, after the read, the write may be executed (typically if some big message was written but not sent completely, so that the OP_WRITE flag was set to TRUE).

      We should most certainly check if the session is being closed before trying to write something.

      Attachments

        Activity

          People

            Unassigned Unassigned
            elecharny Emmanuel Lécharny
            Votes:
            1 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: