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