Unconditional wait() in Read- and WriteWorker of SerialSessionImpl
------------------------------------------------------------------

                 Key: DIRMINA-830
                 URL: https://issues.apache.org/jira/browse/DIRMINA-830
             Project: MINA
          Issue Type: Bug
          Components: Transport
    Affects Versions: 2.0.2
         Environment: win32 x86
            Reporter: Christian Schwarz


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.



--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to