Thomas Watson created FELIX-5922: ------------------------------------ Summary: Use of Thread.interrupt() is incorrect for the shell.Activator Key: FELIX-5922 URL: https://issues.apache.org/jira/browse/FELIX-5922 Project: Felix Issue Type: Bug Components: Gogo Shell Affects Versions: gogo.shell-1.1.0 Reporter: Thomas Watson
org.apache.felix.gogo.shell.Activator.StartShellJob.terminate() The StartShellJob.terminate() method ends up interrupting the current thread. It appears that the terminate() method is attempting to terminate the run() method by interrupting the thread executing the StartShellJob task that was submitted to the executor. The problem is the terminate() method gets called by other threads outside the executor thread running the StartShellJob. If the intention of the terminate method is to interrupt the executor thread running the StartShellJob then the running thread should be captured in the StartShellJob.run() method and that thread should be interrupted from terminate() The way the code is now the thread stopping the gogo.shell bundle ends up being interrupted during Activator.stop(BunleContext) and it remains interrupted upon exit of stop. This causes other odd behavior if that thread continues to be used to stop other bundles. For example, SCR checks for the interrupted flag: {quote}The wait for bundle com.ibm.ws.org.apache.felix.gogo.command/70 being started before destruction has been interrupted. Bundle:com.ibm.ws.org.apache.felix.scr(id=13) java.lang.InterruptedException at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireNanos(AbstractQueuedSynchronizer.java:1245) at java.util.concurrent.locks.ReentrantLock.tryLock(ReentrantLock.java:442) at org.apache.felix.scr.impl.Activator$ScrExtension.destroy(Activator.java:280) at org.apache.felix.scr.impl.AbstractExtender$1.run(AbstractExtender.java:216) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at org.apache.felix.scr.impl.AbstractExtender.destroyExtension(AbstractExtender.java:238) at org.apache.felix.scr.impl.AbstractExtender.bundleChanged(AbstractExtender.java:132) {quote} -- This message was sent by Atlassian JIRA (v7.6.3#76005)