[
https://issues.apache.org/jira/browse/IVY-585?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12518215
]
Jim Bonanno commented on IVY-585:
---------------------------------
I was looking at the code some more and was curious to why checkInterrupted was
checking a boolean flag instead of checking
Thread.currentThread().isInterrupted(). I believe that the code was implemented
this way because if you call interrupted on a thread that has not been started,
then isInterrupted returns false. The interrupted support in ivy is very good.
This issue is just asking for a interface to interrupt that does not call the
join and stop.
The code in my first comment was not correct. The interrupt method must call
operatingThread.interrupt to interrupt blocking i/o. But this implementation
leaves the join up to the caller and can not call stop.
public void interruptSafely(Thread operatingThread) {
if (operatingThread != null && operatingThread.isAlive()) {
if (operatingThread == Thread.currentThread()) {
throw new IllegalStateException("cannot call interrupt from
ivy operating thread");
}
Message.verbose("interrupting operating thread...");
operatingThread.interrupt();
setInterrupted(true);
}
}
> Add an interruptSafely to Ivy
> -----------------------------
>
> Key: IVY-585
> URL: https://issues.apache.org/jira/browse/IVY-585
> Project: Ivy
> Issue Type: Improvement
> Components: Core
> Affects Versions: 2.0.0-alpha-2
> Reporter: Jim Bonanno
>
> I would like to request an implementation of interrupt in the Ivy class that
> can not call stop on the operatingThread. I am hitting issues trying to
> interrupt the resolve from a job in an eclipse plugin. I am seeing a
> ThreadDeath exception in the uncaughtExceptionHandler and then a hung thread.
> I would like propose an interruptedSafely that basically just set interrupted
> to true. This will allow monitoring the operating thread until it terminates
> without a stop.
> /**
> * Marks the current running operation as interrupted. The processing
> will eventually call
> * checkInterrupted and end safely.
> */
> public void interruptSafely(Thread operatingThread) {
> if (operatingThread != null && operatingThread.isAlive()) {
> if (operatingThread == Thread.currentThread()) {
> throw new IllegalStateException("cannot call interrupt from
> ivy operating thread");
> }
> Message.verbose("interrupting operating thread...");
> interrupted = true;
> }
> }
> Another option would be to offer getter/setters on the interrupted boolean.
> Interrupted could then be set and checkInterrupted would end the resolve.
> Since stop is not the recommended way to stop a thread, it would be nice to
> have a way to interrupt the resolve that can not call stop.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.