зеркало из https://github.com/mozilla/gecko-dev.git
Bug 712363, Part 1: Make SyncRunnableBase work without deadlocking when run on the main thread, r=honzab
This commit is contained in:
Родитель
6651530141
Коммит
4a19ec5655
|
@ -46,14 +46,18 @@ SyncRunnableBase::SyncRunnableBase()
|
|||
nsresult
|
||||
SyncRunnableBase::DispatchToMainThreadAndWait()
|
||||
{
|
||||
NS_ASSERTION(!NS_IsMainThread(),
|
||||
"DispatchToMainThreadAndWait called on the main thread.");
|
||||
|
||||
mozilla::MonitorAutoLock lock(monitor);
|
||||
nsresult rv = NS_DispatchToMainThread(this);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
lock.Wait();
|
||||
nsresult rv;
|
||||
if (NS_IsMainThread()) {
|
||||
RunOnTargetThread();
|
||||
rv = NS_OK;
|
||||
} else {
|
||||
mozilla::MonitorAutoLock lock(monitor);
|
||||
rv = NS_DispatchToMainThread(this);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
lock.Wait();
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
|
|
@ -815,11 +815,7 @@ PK11PasswordPrompt(PK11SlotInfo* slot, PRBool retry, void* arg)
|
|||
nsRefPtr<PK11PasswordPromptRunnable> runnable =
|
||||
new PK11PasswordPromptRunnable(slot,
|
||||
static_cast<nsIInterfaceRequestor*>(arg));
|
||||
if (NS_IsMainThread()) {
|
||||
runnable->RunOnTargetThread();
|
||||
} else {
|
||||
runnable->DispatchToMainThreadAndWait();
|
||||
}
|
||||
runnable->DispatchToMainThreadAndWait();
|
||||
return runnable->mResult;
|
||||
}
|
||||
|
||||
|
|
|
@ -944,11 +944,6 @@ void nsNSSSocketInfo::GetPreviousCert(nsIX509Cert** _result)
|
|||
NS_ASSERTION(_result, "_result parameter to GetPreviousCert is null");
|
||||
*_result = nsnull;
|
||||
|
||||
if (NS_IsMainThread()) {
|
||||
NS_ERROR("nsNSSSocketInfo::GetPreviousCert called on the main thread");
|
||||
return;
|
||||
}
|
||||
|
||||
nsRefPtr<PreviousCertRunnable> runnable = new PreviousCertRunnable(mCallbacks);
|
||||
nsresult rv = runnable->DispatchToMainThreadAndWait();
|
||||
NS_ASSERTION(NS_SUCCEEDED(rv), "runnable->DispatchToMainThreadAndWait() failed");
|
||||
|
|
Загрузка…
Ссылка в новой задаче