Closed
Bug 423633
Opened 17 years ago
Closed 2 years ago
nsComponentManager/nsGenericModule/nsGenericFactory aren't quite threadsafe
Categories
(Core :: XPCOM, defect)
Tracking
()
RESOLVED
WORKSFORME
People
(Reporter: timeless, Unassigned)
References
Details
Attachments
(1 file)
(deleted),
patch
|
Details | Diff | Splinter Review |
component manager (threadsafe [by contract]) exposes nsIFactories via:
f=Components.manager.getClassObjectByContractID("@mozilla.org/storage/service;1",Components.interfaces.nsIFactory);
the standard nsIFactory is:
nsGenericFactory (threadsafe [by contract])
that comes from:
nsGenericModule (threadsafe [by contract])
unfortunately it's possible to call f.createInstance() from multiple threads and if mConstructor isn't threadsafe (and making it threadsafe seems like an unreasonable burden)
this does make a few changes:
1. you're only allowed to call SetComponentInfo once (currently the code lets you try to call it multiple times, although the results are not threadsafe)
2. you can't recursively use nsGenericFactory::CreateInstance, doing this makes absolutely no sense, and supporting it is expensive.
the locks for nsGenericFactory are only created/used if the component is marked as threadsafe. This should hopefully speed the fast path and save on allocations (although having mBusy+mLock isn't quite free).
the locks for nsGenericModule are always used
Updated•6 years ago
|
Status: UNCONFIRMED → ASSIGNED
Ever confirmed: true
Comment 1•2 years ago
|
||
The bug assignee is inactive on Bugzilla, so the assignee is being reset.
Assignee: timeless → nobody
Status: ASSIGNED → NEW
Comment 2•2 years ago
|
||
nsGenericFactory no longer exists.
Status: NEW → RESOLVED
Closed: 2 years ago
Resolution: --- → WORKSFORME
You need to log in
before you can comment on or make changes to this bug.
Description
•