[
https://issues.apache.org/jira/browse/DIRMINA-830?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Julien Vermillard updated DIRMINA-830:
--------------------------------------
Attachment: patch.diff
> 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
> Labels: rs232, rxtx, serial
> Attachments: patch.diff
>
>
> 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