{"record":{"id":"f19103b5bd1213a8","repo":"garrytan/gstack","slug":"db-locked","errorCode":"db_locked","errorMessage":"Cookie database is locked (${browserName} may be running). Try closing ${browserName} first.","messagePattern":"Cookie database is locked \\((.+?) may be running\\)\\. Try closing (.+?) first\\.","errorType":"exception","errorClass":"CookieImportError","httpStatus":null,"severity":"error","filePath":"browse/src/cookie-import-browser.ts","lineNumber":435,"sourceCode":"    const walPath = dbPath + '-wal';\n    const shmPath = dbPath + '-shm';\n    if (fs.existsSync(walPath)) fs.copyFileSync(walPath, tmpPath + '-wal');\n    if (fs.existsSync(shmPath)) fs.copyFileSync(shmPath, tmpPath + '-shm');\n\n    const db = new Database(tmpPath, { readonly: true });\n    // Schedule cleanup after the DB is closed\n    const origClose = db.close.bind(db);\n    db.close = () => {\n      origClose();\n      try { fs.unlinkSync(tmpPath); } catch {}\n      try { fs.unlinkSync(tmpPath + '-wal'); } catch {}\n      try { fs.unlinkSync(tmpPath + '-shm'); } catch {}\n    };\n    return db;\n  } catch {\n    // Clean up on failure\n    try { fs.unlinkSync(tmpPath); } catch {}\n    throw new CookieImportError(\n      `Cookie database is locked (${browserName} may be running). Try closing ${browserName} first.`,\n      'db_locked',\n      'retry',\n    );\n  }\n}\n\n// ─── Internal: Keychain Access (async, 10s timeout) ─────────────\n\nfunction deriveKey(password: string, iterations: number): Buffer {\n  return crypto.pbkdf2Sync(password, 'saltysalt', iterations, 16, 'sha1');\n}\n\nfunction getCachedDerivedKey(cacheKey: string, password: string, iterations: number): Buffer {\n  const cached = keyCache.get(cacheKey);\n  if (cached) return cached;\n  const derived = deriveKey(password, iterations);\n  keyCache.set(cacheKey, derived);","sourceCodeStart":417,"sourceCodeEnd":453,"githubUrl":"https://github.com/garrytan/gstack/blob/94993f74012782fd94416dd44b8314f6363a13a4/browse/src/cookie-import-browser.ts#L417-L453","documentation":"Error \"Cookie database is locked (${browserName} may be running). Try closing ${browserName} first.\" thrown in garrytan/gstack.","triggerScenarios":"Thrown at browse/src/cookie-import-browser.ts:435 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"94993f74012782fd94416dd44b8314f6363a13a4","analyzedAt":"2026-08-12T04:06:23.140Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}