From a2961c5019b7c416b41b62c5d5e13f1c586788d1 Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Fri, 5 Aug 2022 10:39:11 +0200 Subject: [PATCH] refactor: use superlock over mutexify --- packages/browserless/package.json | 4 ++-- packages/browserless/src/index.js | 21 ++++++++------------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/packages/browserless/package.json b/packages/browserless/package.json index f9b76154eb..9c95a6ba45 100644 --- a/packages/browserless/package.json +++ b/packages/browserless/package.json @@ -37,11 +37,11 @@ "@browserless/screenshot": "^9.6.0", "debug-logfmt": "~1.0.4", "kill-process-group": "~1.0.3", - "mutexify": "~1.4.0", "p-reflect": "~2.1.0", "p-retry": "~4.6.1", "p-timeout": "~4.1.0", - "require-one-of": "~1.0.16" + "require-one-of": "~1.0.16", + "superlock": "~1.0.0" }, "devDependencies": { "@browserless/test": "latest", diff --git a/packages/browserless/src/index.js b/packages/browserless/src/index.js index 4492dce644..7e881d091e 100644 --- a/packages/browserless/src/index.js +++ b/packages/browserless/src/index.js @@ -5,7 +5,7 @@ const createScreenshot = require('@browserless/screenshot') const debug = require('debug-logfmt')('browserless') const createGoto = require('@browserless/goto') const createPdf = require('@browserless/pdf') -const mutexify = require('mutexify/promise') +const { withLock } = require('superlock') const pReflect = require('p-reflect') const pTimeout = require('p-timeout') const pRetry = require('p-retry') @@ -14,7 +14,7 @@ const { AbortError } = pRetry const driver = require('./driver') -const lock = mutexify() +const lock = withLock() module.exports = ({ timeout: globalTimeout = 30000, ...launchOpts } = {}) => { const goto = createGoto({ timeout: globalTimeout, ...launchOpts }) @@ -64,18 +64,13 @@ module.exports = ({ timeout: globalTimeout = 30000, ...launchOpts } = {}) => { const getBrowser = async () => { if (isClosed) return browserProcessPromise - const release = await lock() - const browserProcess = await browserProcessPromise - - if (browserProcess.isConnected()) { - release() - return browserProcess - } - - await respawn() - release() + const browserProcess = await lock(async () => { + const browserProcess = await browserProcessPromise + if (browserProcess.isConnected()) return browserProcess + respawn() + }) - return getBrowser() + return browserProcess || getBrowser() } const createContext = async ({ retry = 2, timeout: contextTimeout } = {}) => {