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

Felix Meschberger commented on FELIX-1185:
------------------------------------------

Thanks for reporting this issue.

I am fully aware of it, but there is a catch with it: If the component is 
deactivated the following tasks occurr:

   * unregister the service
   * call deactivate
   * unbind services (mostly statically bound, but may also be dynamic ones)

Now, when the component is deactivated while the dependency is uregistered, we 
may cause further components to unregister and so forth. And this all takes 
place in the thread of the initial service unregistration.

And this may lead to deadlock situations, unfortunately. So I decided against 
synchronous deactivation for now in favor of preventing deadlocks.

And yes, if we would deactivate immediately, then the flag introduced in 
FELIX-1178 would not be needed.

If you want to test, simply call deactivateInternal() from the 
AbstractComponentManager.deactivate() method instead of scheduling the call for 
asynchronous execution.

> If a static/mandatory reference to a service is unregistered, the component 
> should be deactivated synchronously instead of asynchronously
> -----------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: FELIX-1185
>                 URL: https://issues.apache.org/jira/browse/FELIX-1185
>             Project: Felix
>          Issue Type: Bug
>          Components: Declarative Services (SCR)
>    Affects Versions: scr-1.0.8
>            Reporter: Agemo Cui
>             Fix For: scr-1.0.10
>
>
> In the specification cmpn 112.3.3 Reference Policy, it says "Component 
> configurations are deactivated before any bound service for a reference 
> having a static policy becomes unavailable."
> My understanding is the deactivate method of the component must be called 
> before any unbind method for a static/mandatory reference is called. And it's 
> reasonable for a static/mandatory reference to be still available in the 
> deactivate method.
> If the component is deactivated asynchronously when a static/mandatory 
> reference to a service is unregistered, then it's possible that the unbind 
> method is called before the deactivate method is called, which makes the 
> service unavailable in the deactivate method.
> This bug may relate to FELIX-1178.
> The fix for this bug should also fix FELIX-1178. No need to add a new flag.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to