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

Jed Wesley-Smith commented on FELIX-2332:
-----------------------------------------

Karl, there are a couple of things I am concerned about with your commit.

Firstly there is partial visibility of changes, specifically in 
_removeExtensions(Object). It now completely clears the m_extensionsCache and 
then calls _add(String, Bundle) to add the old ones in one by one. As the 
openConnection(URL) method is no longer synchronised it can see the 
m_extensionsCache in a partially updated state. It would be better to write the 
m_extensionsCache at the end of the method once m_extensions is completely 
updated. This would also remove any intermediate array creation in this case. 
Obviously addExtension(Object source, Bundle extension) would also need to 
explicitly write the m_extensionsCache as well. This partial visibility issue 
could lead to some spurious and very hard to reproduce IOExceptions.

Second is a small point, the rewritten openConnection method uses Java5 syntax 
(foreach loop), but the m_extensionsCache write in _add uses the old 1.4 
explicit cast of the array, unnecessary in Java5. I don't know if Felix3 is 
Java5 or not, or if it is whether there a policy for using Java5 features.

> Lots of contention on ExtensionManager.openConnection(URL)
> ----------------------------------------------------------
>
>                 Key: FELIX-2332
>                 URL: https://issues.apache.org/jira/browse/FELIX-2332
>             Project: Felix
>          Issue Type: Bug
>          Components: Framework
>    Affects Versions: framework-2.0.5
>            Reporter: Jed Wesley-Smith
>            Assignee: Karl Pauls
>             Fix For: framework-3.0.0
>
>         Attachments: ExtensionManager.java.patch
>
>
> This method is synchronized, apparently to protect is the iteration through 
> the m_extensions list. We have seen significant blocking in our applications 
> as this lock encompasses the call to URL.openConnection as well.
> As this list is rarely changed, a copy-on-write structure would be more 
> appropriate, but at the very least the, only holding the lock during the 
> iteration would be far preferable.

-- 
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