29 lines
1.3 KiB
Diff
29 lines
1.3 KiB
Diff
|
Index: mozilla/xpcom/threads/nsThread.cpp
|
||
|
===================================================================
|
||
|
RCS file: /cvsroot/mozilla/xpcom/threads/nsThread.cpp,v
|
||
|
retrieving revision 1.58.4.2
|
||
|
diff -u -r1.58.4.2 nsThread.cpp
|
||
|
--- mozilla/xpcom/threads/nsThread.cpp 1 Oct 2005 18:43:00 -0000 1.58.4.2
|
||
|
+++ mozilla/xpcom/threads/nsThread.cpp 7 May 2007 19:10:58 -0000
|
||
|
@@ -470,9 +470,17 @@
|
||
|
nsThread::Shutdown()
|
||
|
{
|
||
|
if (gMainThread) {
|
||
|
- // XXX nspr doesn't seem to be calling the main thread's destructor
|
||
|
- // callback, so let's help it out:
|
||
|
- nsThread::Exit(NS_STATIC_CAST(nsThread*, gMainThread));
|
||
|
+ // In most recent versions of NSPR the main thread's destructor
|
||
|
+ // callback will get called.
|
||
|
+ // In older versions of NSPR it will not get called,
|
||
|
+ // (unless we call PR_Cleanup).
|
||
|
+ // Because of that we:
|
||
|
+ // - call the function ourselves
|
||
|
+ // - set the data pointer to NULL to ensure the function will
|
||
|
+ // not get called again by NSPR
|
||
|
+ // The PR_SetThreadPrivate call does both of these.
|
||
|
+ // See also bugs 379550, 362768.
|
||
|
+ PR_SetThreadPrivate(kIThreadSelfIndex, NULL);
|
||
|
nsrefcnt cnt;
|
||
|
NS_RELEASE2(gMainThread, cnt);
|
||
|
NS_WARN_IF_FALSE(cnt == 0, "Main thread being held past XPCOM shutdown.");
|