Bug 1254829 - Calling TerminateProcess for WindowsXP to bypass DLL detach handler, r?bsmedberg draft
authorPeter Chang <pchang@mozilla.com>
Wed, 06 Apr 2016 10:05:58 +0800
changeset 348824 77da582a762622232915cc5f59cfdad9d3839f4a
parent 347901 a235bfcc8c411169b82420c503775c1a3e7edad5
child 517946 877414e71ebce74b2e145344004b6a7100077bee
push id14931
push userbmo:howareyou322@gmail.com
push dateFri, 08 Apr 2016 06:11:38 +0000
reviewersbsmedberg
bugs1254829
milestone48.0a1
Bug 1254829 - Calling TerminateProcess for WindowsXP to bypass DLL detach handler, r?bsmedberg MozReview-Commit-ID: 41fuZobVVyv
dom/ipc/ContentChild.cpp
--- a/dom/ipc/ContentChild.cpp
+++ b/dom/ipc/ContentChild.cpp
@@ -2312,17 +2312,25 @@ ContentChild::ProcessingError(Result aCo
 #endif
   NS_RUNTIMEABORT("Content child abort due to IPC error");
 }
 
 void
 ContentChild::QuickExit()
 {
   NS_WARNING("content process _exit()ing");
+
+#ifdef XP_WIN
+  // In bug 1254829, the destructor got called when dll got detached on windows,
+  // switch to TerminateProcess to bypass dll detach handler during the process
+  // termination.
+  TerminateProcess(GetCurrentProcess(), 0);
+#else
   _exit(0);
+#endif
 }
 
 nsresult
 ContentChild::AddRemoteAlertObserver(const nsString& aData,
                                      nsIObserver* aObserver)
 {
   NS_ASSERTION(aObserver, "Adding a null observer?");
   mAlertObservers.AppendElement(new AlertObserver(aObserver, aData));