From fd23a9d626250cb1ef04b57b5184c6490d2982c8 Mon Sep 17 00:00:00 2001 From: Pascal Hartig Date: Thu, 31 Mar 2022 08:57:13 -0700 Subject: [PATCH] Clean up socket on exit Summary: Be more aggressive in cleaning up after ourselves. Using a tiny library by Sindre that handles standard exit events, SIGTERM and SIGINT. Reviewed By: aigoncharov Differential Revision: D35281772 fbshipit-source-id: a789f90f172b3aa3e187739cf2b7fefa75405891 --- desktop/flipper-server/package.json | 1 + desktop/flipper-server/src/startBaseServer.tsx | 8 ++++++++ desktop/yarn.lock | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/desktop/flipper-server/package.json b/desktop/flipper-server/package.json index a8e6d4a28..0967ecc75 100644 --- a/desktop/flipper-server/package.json +++ b/desktop/flipper-server/package.json @@ -10,6 +10,7 @@ "bugs": "https://github.com/facebook/flipper/issues", "dependenciesComment": "mac-ca is required dynamically for darwin, node-fetch is treated special in electron-requires, not sure why", "dependencies": { + "exit-hook": "^2.1.1", "http-proxy": "^1.18.1", "mac-ca": "^1.0.6", "node-fetch": "^2.6.7", diff --git a/desktop/flipper-server/src/startBaseServer.tsx b/desktop/flipper-server/src/startBaseServer.tsx index b6c664d6b..e91d51eaf 100644 --- a/desktop/flipper-server/src/startBaseServer.tsx +++ b/desktop/flipper-server/src/startBaseServer.tsx @@ -18,6 +18,7 @@ import {WEBSOCKET_MAX_MESSAGE_SIZE} from 'flipper-server-core'; import {parse} from 'url'; import xdgBasedir from 'xdg-basedir'; import proxy from 'http-proxy'; +import exitHook from 'exit-hook'; import {userInfo} from 'os'; @@ -145,6 +146,13 @@ async function startProxyServer( console.log('Starting socket server on ', socketPath); console.log(`Starting proxy server on http://localhost:${config.port}`); + exitHook(() => { + console.log('Cleaning up socket on exit:', socketPath); + // This *must* run synchronously and we're not blocking any UI loop by definition. + // eslint-disable-next-line node/no-sync + fs.rmSync(socketPath, {force: true}); + }); + proxyServer.on('error', (err, _req, res) => { console.warn('Error in proxy server:', err); if (res instanceof ServerResponse) { diff --git a/desktop/yarn.lock b/desktop/yarn.lock index b9e8a79b2..ae82c200a 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -5996,6 +5996,11 @@ execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +exit-hook@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-2.2.1.tgz#007b2d92c6428eda2b76e7016a34351586934593" + integrity sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw== + exit-on-epipe@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692"