Fixed crash due to multi-threading. bug# 7308, bug# 8150

git-svn-id: svn://10.0.0.236/trunk@35882 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
dp%netscape.com
1999-06-18 23:27:09 +00:00
parent d019f9ce2b
commit 8afd0c31d1
3 changed files with 27 additions and 0 deletions

View File

@@ -814,7 +814,9 @@ NS_IMETHODIMP nsRegistry::GetSubtree( Key baseKey, const char *path, Key *result
// Make sure we have a place for the result.
if( result ) {
// Get key.
PR_Lock(mregLock);
mErr = NR_RegGetKey( mReg,(RKEY)baseKey,(char*)path,(RKEY*)result );
PR_Unlock(mregLock);
// Convert result.
rv = regerr2nsresult( mErr );
} else {

View File

@@ -875,7 +875,18 @@ nsComponentManagerImpl::FindFactory(const nsCID &aClass,
{
PR_LOG(nsComponentManagerLog, PR_LOG_ALWAYS,
("\t\tnot found in factory cache. Looking in registry"));
// bug# 7308 , bug# 8150
// Findfactory randomly fails if a ProgIDToCLSID() happenes
// at the same time from another thread.
// The registry seems to be locking properly. Until I figureout
// what the right problem is, I am putting this major locks on
// these two routines
// PlatformFind() and PlatformProgIDToCLSID()
//to achieve mutual exclusion at a course level.
PR_EnterMonitor(mMon);
nsresult rv = PlatformFind(aClass, &entry);
PR_ExitMonitor(mMon);
// If we got one, cache it in our hashtable
if (NS_SUCCEEDED(rv))
@@ -957,7 +968,19 @@ nsComponentManagerImpl::ProgIDToCLSID(const char *aProgID, nsCID *aClass)
else {
// This is the first time someone has asked for this
// ProgID. Go to the registry to find the CID.
// bug# 7308 , bug# 8150
// Findfactory randomly fails if a ProgIDToCLSID() happenes
// at the same time from another thread.
// The registry seems to be locking properly. Until I figureout
// what the right problem is, I am putting this major locks on
// these two routines
// PlatformFind() and PlatformProgIDToCLSID()
//to achieve mutual exclusion at a course level.
PR_EnterMonitor(mMon);
res = PlatformProgIDToCLSID(aProgID, aClass);
PR_ExitMonitor(mMon);
if (NS_SUCCEEDED(res)) {
// Found it. So put it into the cache.

View File

@@ -814,7 +814,9 @@ NS_IMETHODIMP nsRegistry::GetSubtree( Key baseKey, const char *path, Key *result
// Make sure we have a place for the result.
if( result ) {
// Get key.
PR_Lock(mregLock);
mErr = NR_RegGetKey( mReg,(RKEY)baseKey,(char*)path,(RKEY*)result );
PR_Unlock(mregLock);
// Convert result.
rv = regerr2nsresult( mErr );
} else {