diff --git a/dom/workers/WorkerPrivate.cpp b/dom/workers/WorkerPrivate.cpp index f33ded1c5f..5edf7dc4a5 100644 --- a/dom/workers/WorkerPrivate.cpp +++ b/dom/workers/WorkerPrivate.cpp @@ -4339,6 +4339,11 @@ WorkerPrivate::Constructor(JSContext* aCx, return nullptr; } + // From this point on (worker thread has been started) we + // must keep ourself alive. We can now only be cleared by + // ClearSelfAndParentEventTargetRef(). + worker->mSelfRef = worker; + worker->EnableDebugger(); RefPtr compiler = @@ -4348,8 +4353,6 @@ WorkerPrivate::Constructor(JSContext* aCx, return nullptr; } - worker->mSelfRef = worker; - return worker.forget(); } diff --git a/mfbt/LinkedList.h b/mfbt/LinkedList.h index a099d7597a..9d04e64c77 100644 --- a/mfbt/LinkedList.h +++ b/mfbt/LinkedList.h @@ -327,7 +327,8 @@ private: void setNextUnsafe(RawType aElem) { LinkedListElement *listElem = static_cast(aElem); - MOZ_ASSERT(!listElem->isInList()); + if (listElem->isInList()) + return; listElem->mNext = this->mNext; listElem->mPrev = this; @@ -344,7 +345,8 @@ private: void setPreviousUnsafe(RawType aElem) { LinkedListElement* listElem = static_cast*>(aElem); - MOZ_ASSERT(!listElem->isInList()); + if (listElem->isInList()) + return; listElem->mNext = this; listElem->mPrev = this->mPrev;