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

Carsten Ziegeler commented on FELIX-5028:
-----------------------------------------

I don't think this is needed, because this extra check assumes that the 
framework is wrong
We could change m_useCount.decrementAndGet() == 0 to 
m_useCount.decrementAndGet() <= 0 as in this processing of ungetService the 
count is reset to zero.
A simple check of m_useCount.get() > 0 && m_useCount.decrementAndGet() == 0 
would catch the situation where the framework calls ungetService more often, 
but it doesn't reset the counter to 0, so e.g. if it's -1 , the next call to 
getService gets it to 0 - which would be wrong


> ServiceFactory for components might return null
> -----------------------------------------------
>
>                 Key: FELIX-5028
>                 URL: https://issues.apache.org/jira/browse/FELIX-5028
>             Project: Felix
>          Issue Type: Bug
>          Components: Declarative Services (SCR)
>    Affects Versions: scr-2.0.0
>            Reporter: Carsten Ziegeler
>            Assignee: Carsten Ziegeler
>             Fix For: scr-2.0.2
>
>
> There seems to be an uneven handling of locking/status information in 
> getService/ungetService of the service factory registered by the 
> SingleComponentManager. (I didn't check the other factories)
> We have a concurrent get/ungetService for the same service. While the unget 
> service uses a lock around decrementing the counter, incrementing the counter 
> and other actions in getService are not using the lock. There is a partial 
> lock there. 
> But this can lead to the problem that while the preconditions for getService 
> are still fine, ungetService cleans up which then makes getService to return 
> null.
> We have a huge app where we can reproduce the problem, I'll try to trim this 
> down to a simple test case.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to