[
https://issues.apache.org/jira/browse/DIRMINA-755?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12800761#action_12800761
]
Emmanuel Lecharny commented on DIRMINA-755:
-------------------------------------------
Ok, it took me a hell of a time to understand what's going on.
Basically, in 2.0-M6, the dispose() called in the listener works because we
wait until a timeout is reached. We use a DEAD_LOCK_CHECK_INTERVAL delay (5
seconds) and we iterate until either the 'ready' flag is swapped to true (it
never happens) or until we have reached a timemout, which is set to MAX_LONG in
this very case.
In M6, the code looks like :
long endTime = System.currentTimeMillis() + timeoutMillis;
...
if (endTime < System.currentTimeMillis()) {
return ready;
}
When timeoutMillis == MAX_LONG, it's easy to realize that we exit just because
endTime is always < 0 !
I fixed this bug in http://svn.apache.org/viewvc?view=revision&revision=713708
(14 months ago ...) and then in
http://svn.apache.org/viewvc?view=revision&revision=781711 (7 months ago) by
adding these lines :
+ if (endTime < 0) {
+ endTime = Long.MAX_VALUE;
+ }
So now, the wait() never exists from the loop, thus the hang...
Now, we have to find a way to get out of this loop the normal way...
> IoConnectot.dispose blocks forever
> ----------------------------------
>
> Key: DIRMINA-755
> URL: https://issues.apache.org/jira/browse/DIRMINA-755
> Project: MINA
> Issue Type: Bug
> Affects Versions: 2.0.0-RC1
> Reporter: Emmanuel Lecharny
> Fix For: 2.0.0-RC2
>
> Attachments: MinaTest.zip
>
>
> (Extracted from the ML)
> I recently switched from 2.0.0-M6 to 2.0.0-RC1 and now discovered a
> problem with the IoConnector (I'm using the nio stuff)...
> I'll try to explain:
> In case of network connection shutdown I try to clean up as good as
> possible. I terminate tread pools, I close the session, and finally I try
> to dispose the IoConnector.
> Here's a small code-snippet from my shutdown-code:
> ----
> CloseFuture closeFuture = ctsc.getSession().close(false);
> closeFuture.addListener(new
> IoFutureListener<IoFuture>() {
> public void operationComplete(IoFuture future) {
> ctsc.getFilterchainWorkerPool().shutdown();
> System.out.println("managed session count=
> "+ctsc.getConnector().getManagedSessionCount());
> ctsc.getConnector().dispose();
> }
> });
> ----
> "ctsc" is a simple container which contains the session (getSession) and
> the used connection (getConnector). First I try to close the session. Then,
> if this operation is completed, I try to shutdown a thread pool and finally
> dispose the connector. I read in the api doc, that this dispose call may
> block in case of still open session related to this connector.
> I tried to print out the number of still open sessions. On the console I
> get: "managed session count= 0"
> But the next call, the dispose() call, blocks and prevents the remaining
> threads from shutdown to get a clean application termination.
> If I switch from RC1 backt o M6, this works quite well.
> Am I doing something wrong? Has the behavior changed? *little bit
> confused*
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.