|
@@ -103,7 +103,9 @@ function acquirePidFileLock(file: string): (() => void) | null {
|
|
|
return () => {
|
|
return () => {
|
|
|
try {
|
|
try {
|
|
|
rmSync(lock, { recursive: true, force: true });
|
|
rmSync(lock, { recursive: true, force: true });
|
|
|
- } catch {}
|
|
|
|
|
|
|
+ } catch (err) {
|
|
|
|
|
+ log('[companion] lock release failed', String(err));
|
|
|
|
|
+ }
|
|
|
};
|
|
};
|
|
|
} catch (err) {
|
|
} catch (err) {
|
|
|
const code = (err as NodeJS.ErrnoException).code;
|
|
const code = (err as NodeJS.ErrnoException).code;
|
|
@@ -132,10 +134,13 @@ function pidFileLockHasLiveOwner(lock: string): boolean {
|
|
|
try {
|
|
try {
|
|
|
const owner = parsePidFile(readFileSync(path.join(lock, 'owner'), 'utf8'));
|
|
const owner = parsePidFile(readFileSync(path.join(lock, 'owner'), 'utf8'));
|
|
|
if (owner !== null) return isProcessAlive(owner);
|
|
if (owner !== null) return isProcessAlive(owner);
|
|
|
- } catch {
|
|
|
|
|
|
|
+ } catch (err) {
|
|
|
|
|
+ log('[companion] lock owner check failed', String(err));
|
|
|
try {
|
|
try {
|
|
|
return Date.now() - statSync(lock).mtimeMs < 5000;
|
|
return Date.now() - statSync(lock).mtimeMs < 5000;
|
|
|
- } catch {}
|
|
|
|
|
|
|
+ } catch (err) {
|
|
|
|
|
+ log('[companion] lock owner check failed', String(err));
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
@@ -175,7 +180,9 @@ function readState(): CompanionState {
|
|
|
if (parsed?.version === 1 && Array.isArray(parsed.sessions)) {
|
|
if (parsed?.version === 1 && Array.isArray(parsed.sessions)) {
|
|
|
return parsed as CompanionState;
|
|
return parsed as CompanionState;
|
|
|
}
|
|
}
|
|
|
- } catch {}
|
|
|
|
|
|
|
+ } catch (err) {
|
|
|
|
|
+ log('[companion] state load failed', String(err));
|
|
|
|
|
+ }
|
|
|
return { version: 1, sessions: [] };
|
|
return { version: 1, sessions: [] };
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -206,7 +213,9 @@ function acquireStateLock(file: string): () => void {
|
|
|
return () => {
|
|
return () => {
|
|
|
try {
|
|
try {
|
|
|
rmSync(lock, { recursive: true, force: true });
|
|
rmSync(lock, { recursive: true, force: true });
|
|
|
- } catch {}
|
|
|
|
|
|
|
+ } catch (err) {
|
|
|
|
|
+ log('[companion] lock release failed', String(err));
|
|
|
|
|
+ }
|
|
|
};
|
|
};
|
|
|
} catch (err) {
|
|
} catch (err) {
|
|
|
const code = (err as NodeJS.ErrnoException).code;
|
|
const code = (err as NodeJS.ErrnoException).code;
|
|
@@ -252,7 +261,9 @@ export class CompanionManager {
|
|
|
(s) => s.session_id !== this.id,
|
|
(s) => s.session_id !== this.id,
|
|
|
);
|
|
);
|
|
|
});
|
|
});
|
|
|
- } catch {}
|
|
|
|
|
|
|
+ } catch (err) {
|
|
|
|
|
+ log('[companion] status update failed', String(err));
|
|
|
|
|
+ }
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
this.registerActiveManager();
|
|
this.registerActiveManager();
|
|
@@ -345,7 +356,9 @@ export class CompanionManager {
|
|
|
if (activeManagers.size === 0 && activeExitListener) {
|
|
if (activeManagers.size === 0 && activeExitListener) {
|
|
|
try {
|
|
try {
|
|
|
process.removeListener('exit', activeExitListener);
|
|
process.removeListener('exit', activeExitListener);
|
|
|
- } catch {}
|
|
|
|
|
|
|
+ } catch (err) {
|
|
|
|
|
+ log('[companion] exit listener removal failed', String(err));
|
|
|
|
|
+ }
|
|
|
activeExitListener = null;
|
|
activeExitListener = null;
|
|
|
}
|
|
}
|
|
|
if (this.config?.enabled !== true) return;
|
|
if (this.config?.enabled !== true) return;
|
|
@@ -508,7 +521,9 @@ export class CompanionManager {
|
|
|
if (spawnedChild && !this.wasSpawner) {
|
|
if (spawnedChild && !this.wasSpawner) {
|
|
|
try {
|
|
try {
|
|
|
spawnedChild.kill();
|
|
spawnedChild.kill();
|
|
|
- } catch {}
|
|
|
|
|
|
|
+ } catch (killErr) {
|
|
|
|
|
+ log('[companion] spawn failed', String(killErr));
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
log('[companion] spawn guard failed', String(err));
|
|
log('[companion] spawn guard failed', String(err));
|
|
|
} finally {
|
|
} finally {
|