[ 
https://issues.apache.org/jira/browse/FELIX-5416?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16008115#comment-16008115
 ] 

Christoph Nölle commented on FELIX-5416:
----------------------------------------

Seems to be a problem in the terminate method of ComponentActorThread (see 
below). Suppose we run into tasks.wait(), the thread gets interrupted, and the 
tasks lists is not empty yet. Then the catch block is executed, we interrupt 
the thread, and run into tasks.wait() again. But since the thread has been 
interrupted, another InterruptedException is raised immediately, and we are 
caught in a loop.

I think that there should be either a return statement at the end of the catch 
block (then the remaining tasks in the list will not be executed), or the 
interrupt() call should be moved outside the while loop.

void terminate()
    {
        schedule( TERMINATION_TASK );
        synchronized ( tasks )
        {
            while ( !tasks.isEmpty() )
            {
                try
                {
                    tasks.wait();
                }
                catch ( InterruptedException e )
                {
                    Thread.currentThread().interrupt();
                    logger.log( LogService.LOG_ERROR, "Interrupted exception 
waiting for queue to empty", e );
                }
            }
        }
    }

> Endless loop throwing InterruptedException when shutting down framework
> -----------------------------------------------------------------------
>
>                 Key: FELIX-5416
>                 URL: https://issues.apache.org/jira/browse/FELIX-5416
>             Project: Felix
>          Issue Type: Bug
>          Components: Declarative Services (SCR)
>    Affects Versions: scr-2.0.6
>         Environment: OS: linux and windows
> Java Version: 1.8.0_111
> OSGi Impl: Apache Felix (5.6.1)
>            Reporter: Jorge Cercas
>
> When shutting down the framework via the framework's stop method or in a gogo 
> terminal shell via stop 0 command, the Apache Felix Declarative Services goes 
> into a never ending loop with the following log ENTRIES:
> 2016-11-16 17:44:22,030 | ERROR | FelixStartLevel  | scr                      
>         | 7 - org.apache.felix.scr - 2.0.6 | Interrupted exception waiting 
> for queue to empty
> java.lang.InterruptedException
>       at java.lang.Object.wait(Native Method)[:1.8.0_111]
>       at java.lang.Object.wait(Object.java:502)[:1.8.0_111]
>       at 
> org.apache.felix.scr.impl.ComponentActorThread.terminate(ComponentActorThread.java:131)[7:org.apache.felix.scr:2.0.6]
>       at 
> org.apache.felix.scr.impl.Activator.doStop(Activator.java:216)[7:org.apache.felix.scr:2.0.6]
>       at 
> org.apache.felix.utils.extender.AbstractExtender.stop(AbstractExtender.java:128)[7:org.apache.felix.scr:2.0.6]
>       at 
> org.apache.felix.scr.impl.Activator.stop(Activator.java:181)[7:org.apache.felix.scr:2.0.6]
>       at 
> org.apache.felix.framework.util.SecureAction.stopActivator(SecureAction.java:719)[org.apache.felix.framework-5.6.1.jar:]
>       at 
> org.apache.felix.framework.Felix.stopBundle(Felix.java:2610)[org.apache.felix.framework-5.6.1.jar:]
>       at 
> org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1389)[org.apache.felix.framework-5.6.1.jar:]
>       at 
> org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)[org.apache.felix.framework-5.6.1.jar:]
>       at java.lang.Thread.run(Thread.java:745)[:1.8.0_111]



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to