Skip to content

Commit d3a40be

Browse files
authored
browser(firefox): reliably close the pipe (#3280)
1 parent 573f580 commit d3a40be

File tree

4 files changed

+11
-5
lines changed

4 files changed

+11
-5
lines changed

browser_patches/firefox/BUILD_NUMBER

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
1149
2-
Changed: [email protected] Mon Aug 3 15:21:45 PDT 2020
1+
1150
2+
Changed: [email protected] Mon Aug 3 19:37:50 PDT 2020

browser_patches/firefox/juggler/components/juggler.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,11 @@ CommandLineHandler.prototype = {
9494
const browserHandler = new BrowserHandler(dispatcher.rootSession(), dispatcher, targetRegistry, () => {
9595
if (silent)
9696
Services.startup.exitLastWindowClosingSurvivalArea();
97-
pipe.stop();
97+
// Send response to the Browser.close, and then stop in the next microtask.
98+
Promise.resolve().then(() => {
99+
connection.onclose();
100+
pipe.stop();
101+
});
98102
});
99103
dispatcher.rootSession().registerHandler('Browser', browserHandler);
100104
loadFrameScript();

browser_patches/firefox/juggler/pipe/nsRemoteDebuggingPipe.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,12 +128,14 @@ nsresult nsRemoteDebuggingPipe::Stop() {
128128
#if defined(_WIN32)
129129
CancelIoEx(readHandle, nullptr);
130130
CloseHandle(readHandle);
131+
CloseHandle(writeHandle);
131132
#else
132133
shutdown(readFD, SHUT_RDWR);
134+
shutdown(writeFD, SHUT_RDWR);
133135
#endif
134136
mReaderThread->Shutdown();
135137
mReaderThread = nullptr;
136-
mWriterThread->AsyncShutdown();
138+
mWriterThread->Shutdown();
137139
mWriterThread = nullptr;
138140
return NS_OK;
139141
}

browser_patches/firefox/juggler/protocol/BrowserHandler.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,13 +125,13 @@ class BrowserHandler {
125125
}
126126

127127
async close() {
128-
this._onclose();
129128
let browserWindow = Services.wm.getMostRecentWindow(
130129
"navigator:browser"
131130
);
132131
if (browserWindow && browserWindow.gBrowserInit) {
133132
await browserWindow.gBrowserInit.idleTasksFinishedPromise;
134133
}
134+
this._onclose();
135135
Services.startup.quit(Ci.nsIAppStartup.eForceQuit);
136136
}
137137

0 commit comments

Comments
 (0)