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

Unconditional wait() in Read- and WriteWorker of SerialSessionImpl

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.0.0, 2.0.1, 2.0.2
    • 2.0.4
    • Transport
    • win32 x86

    Description

      The inner worker classes of SerialSessionImpl violates the guarded block contract for Object#wait(). Under certain conditions it is possible that a session write starved.

      The wait loops of Read- and WriteWorker should be inside the synchronized block! We have some starvations while writing data to or serial session. We found out that in this case the WriteWorker-Thread waits endless for data to write. Because we write data asynchron to the serial session, we assume that a race condition occures. One thread is inside the unguarded WriterWorker#flushWrites() while an other invoke SerialProcessor#flush().

      http://download.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html
      states-> Always invoke wait inside a loop that tests for the condition being waited for. Don't assume that the interrupt was for the particular condition you were waiting for, or that the condition is still true.

      Attachments

        1. patch.diff
          1 kB
          Julien Vermillard

        Activity

          People

            vrm Julien Vermillard
            christian_schwarz Christian Schwarz
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: