[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [equinox-dev] Thread Safety Issues
|
On Thu, Sep 18, 2008 at 06:30:40AM -0500, Thomas Watson wrote:
>
> Hi Rob,
>
> Thanks for your continued help in this area. I have not had time to look
> into the details of your patches but your approach sounds reasonable. To
> answer your question about the resolver. The original design was intended
> to allow a resolver implementation to be plugged in. This has never been
> realized. At this time I am happy to keep resolver in the same code base
> as the State implementation to solve the threading issues.
>
> Tom
I'm glad to help. No rush on checking out the patches - I'm running our test suite
against a build I made locally so I'm can still work and test. I'll continue to
work on StateImpl and update the patches as soon as I have a working solution.
>
>
>
>
>
> From: Rob Harrop <rob.harrop@xxxxxxxxxxxxxxxx>
>
> To: Equinox development mailing list <equinox-dev@xxxxxxxxxxx>
>
> Date: 09/18/2008 05:50 AM
>
> Subject: Re: [equinox-dev] Thread Safety Issues
>
>
>
>
>
>
> Tom,
>
> I updated the patch for the BundleRepository issue. After looking at it in
> detail
> I decided the best way to go was to simply synchronize on the public
> methods of BR
> and allow clients to participate in the client locking protocol. With this
> approach
> this is no need to stop using Framework.bundles as a lock for other
> composite operations.
>
> I started working on StateImpl and general resolver thread-safety and I
> have few questions.
> Firstly, I notice that StateDelta.getState() and StateImpl.compare() are
> unused other than
> in tests. Are they intended for use by other codebases?
>
> Secondly, the biggest challenge with making StateImpl threadsafe is around
> its interaction
> with its Resolver. I really wanted to avoid making calls to the Resolver
> while holding any
> locks but this seems like it will be impractical, and in fact won't result
> in StateImpl being
> fully safe. I notice already that a few calls to the Resolver are made
> whilst holding the
> StateImpl lock (linkDynamicImport for example). Is this something you are
> happy to keep
> since the Resolver is basically in the same codebase?
>
> Rob
>
> On Wed, Sep 17, 2008 at 07:02:08AM -0500, Thomas Watson wrote:
> > > [equinox-dev] Thread Safety Issues
> > >
> > > Rob Harrop
> > >
> > > to:
> > >
> > > equinox-dev
> > >
> > > 09/16/2008 11:38 AM
> > >
> > >
> > > Chaps,
> > >
> > > I've created a few bug reports (with patches) related to thread
> > > safety issues we have found while using Equinox in SpringSource dm
> > > Server. I felt that it wasn't appropriate to create massive patches
> > > so I focused instead on point fixes, but I wanted to briefly outline
> > > what I think is a fuller solution to the highlighted issues.
> >
> > Thanks Rob. I agree that work is needed here. I opened another plan
> > bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=247636 to track the
> > various bugs you and Glyn Normington have opened. We plan to work
> > on bundle lifecycle thread safety issues in the 3.5 release cycle.
> >
> > >
> > > So far we have identified three main issues:
> > >
> > > * BaseStorage.getNextBundleId() performs unsafe increment
> > > (https://bugs.eclipse.org/bugs/show_bug.cgi?id=247520)
> > > * StateImpl access bundleDescriptions in an unsafe manner
> > > (https://bugs.eclipse.org/bugs/show_bug.cgi?id=247522)
> > > * Framework access BundleRepository in an unsafe manner
> > > (https://bugs.eclipse.org/bugs/show_bug.cgi?id=247521)
> > >
> > > For the first issue, I think the patch I supplied is fine, the
> > > solution there is pretty straightforward.
> > >
> > > For the StateImpl issue, I attacked only the issue around accesses
> > > to the bundleDescriptions field, but I think that accesses to all
> > > fields need to be protected. Moreover, I think that all the state of
> > > StateImpl needs to be protected by the same lock to guarantee atomic
> > > updates of the internal data structures.
> >
> > I agree with the analysis. I looked into this a few weeks ago and
> > identified that the State object needs to be protected when accessed
> > by the framework. The tricky part here is the pervasive access to
> > the State object in the Framework and the risk of deadlock.
> >
> > >
> > > In Framework, all calls to BundleRepository.add were not guarded by
> > > the bundles lock. I made sure that all accesses to bundles are
> > > correctly (I think) guarded. However, I feel a better approach is to
> > > make BundleRepository itself threadsafe. The JavaDoc of BR currently
> > > states that it must be synchronized before access but obviously it
> > > is easy to forget, as is the case currently. Also, I notice that
> > > Framework.bundles is used as a monitor for a lot of operations that
> > > don't directly manipulate its state and it can also escape control
> > > of Equinox via Framework.getBundles(). This is deadlock prone.
> > > Ideally, the BundleRepository would remain an Equinox internal data
> > > structure, maintain its own thread safetry and not be used as a
> > > monitor for other operations. Replacing the use of Framework.bundles
> > > for synchronization with something like Framework.bundlesMonitor
> > > will help here.
> >
> > I agree. Something like this is needed.
> >
> > >
> > > I haven't had to chance to explore the code further, but I'll raise
> > > any other issues as I find them.
> > >
> > > If you want to make these larger thread-safety changes, I am happy
> > > to submit patches that address them.
> >
> > Thanks Rob! I will be glad to work with you on these issues. It will
> > really help to have SpringSource help. Typical Eclipse scenarios
> > manage bundle lifecycles (install,uninstall,update,refresh) from a
> > single thread so we do not exercise thread safety in this area.
> >
> > Thanks for your help.
> >
> > Tom.
> >
> > >
> > > Regards,
> > >
> > > Rob
> > >
> > > --
> > > Rob Harrop
> > > SpringSource
> > > _______________________________________________
> > > equinox-dev mailing list
> > > equinox-dev@xxxxxxxxxxx
> > > https://dev.eclipse.org/mailman/listinfo/equinox-dev
> > _______________________________________________
> > equinox-dev mailing list
> > equinox-dev@xxxxxxxxxxx
> > https://dev.eclipse.org/mailman/listinfo/equinox-dev
>
>
> --
> -- Rob Harrop
> _______________________________________________
> equinox-dev mailing list
> equinox-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/equinox-dev
>
> _______________________________________________
> equinox-dev mailing list
> equinox-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/equinox-dev
--
-- Rob Harrop