Guillaume Nodet created FELIX-3806:
--------------------------------------

             Summary: Some bundle events are sent to SynchronousBundleListeners 
without holding the bundle lock which can cause the event to be delivered out 
of order
                 Key: FELIX-3806
                 URL: https://issues.apache.org/jira/browse/FELIX-3806
             Project: Felix
          Issue Type: Bug
          Components: Framework
            Reporter: Guillaume Nodet


This can be very troublesome for extenders which react to the STARTED / 
STOPPING events for example.
If two threads are starting / stopping the bundles, those two events can be 
delivered out of order.
The spec mentions that pathological listeners can lead to such results, but 
that's only because the listener does change the state by calling back the 
framework.

The above out of order delivery is very difficult to overcome when writing 
extenders because the bundle can be stopped concurrently while processing the 
STARTED event.

I've seen the purpose of this behavior is to enable bundles to modify the 
lifecycle of the bundles in reaction to the STARTED event.
However, I don't understand this objection.  If the thread holding the lock 
calls back into the framework to stop the bundle, the lock is reentrant and 
that should work.
If the work is done in a separate thread, the thread will wait until the 
STARTED event is processed and that should not be a problem.

So I suggest moving back the STARTED and STOPPED events inside the bundle lock.


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to