[
https://issues.apache.org/jira/browse/ASYNCWEB-33?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sangjin Lee closed ASYNCWEB-33.
-------------------------------
Resolution: Fixed
eliminated several timing related issues:
- canceling the timeout task should be done without interrupt (serves little
purpose)
- made the timeoutHandle variable in HttpRequestMessage an atomic reference to
ensure correct visibility
- set the timeout handle to null at the beginning of the timeout task to
minimize the window during which other events may get a hold of the timeout
handle
- marked the request as close pending any time we initiate session closing
- when we check out a session from the cache, check the pending close status so
if it has a pending close, do not use it
- in cancelTask(), use the removeTimeoutHandle() method to retrieve and remove
the handle atomically
- moved up the Future.set() and Future.setException() operations to prior to
the monitoring listener notification
- ensure only one callback method fires for a given request by using a flag
- eat up any Throwable that may result as invoking the callback so the flow
continues even if callbacks throw exceptions
> timing problems between messageReceived() and the timeout task
> --------------------------------------------------------------
>
> Key: ASYNCWEB-33
> URL: https://issues.apache.org/jira/browse/ASYNCWEB-33
> Project: Asyncweb
> Issue Type: Bug
> Components: Client
> Affects Versions: client-1.0.0
> Reporter: Sangjin Lee
> Assignee: Sangjin Lee
>
> The progress of the timeout task and that of messageReceived() are fully
> concurrent. There are a couple of interesting problems. First, if the timeout
> task launches and in the meantime the messageReceived() method fires, it is
> possible for messageReceived() to interrupt the timeout task thread.
> The investigation of this issue led to the discovery of another
> timing-related issue. Namely, if the timeout task launches and in the
> meantime the messageReceived() method fires, it is possible for
> messageReceived() to cache the session back into the cache (although the
> timeout task will try to close the connection later on) so that there is a
> small window of opportunity that the connection will be checked out for
> another request. This might cause unexpected session closings.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.