mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-10-14 13:22:30 +00:00
fix resouce handling
This commit is contained in:
@@ -18,6 +18,7 @@ const trackedContainers = new Set<string>();
|
|||||||
const CLEANUP_SIGNALS: Deno.Signal[] = ["SIGINT", "SIGTERM"];
|
const CLEANUP_SIGNALS: Deno.Signal[] = ["SIGINT", "SIGTERM"];
|
||||||
let signalCleanupHandlersInstalled = false;
|
let signalCleanupHandlersInstalled = false;
|
||||||
let signalCleanupInProgress = false;
|
let signalCleanupInProgress = false;
|
||||||
|
const signalCleanupHandlers = new Map<Deno.Signal, () => void>();
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// Low-level docker wrapper
|
// Low-level docker wrapper
|
||||||
@@ -217,16 +218,31 @@ function ensureSignalCleanupHandlers(): void {
|
|||||||
if (signalCleanupHandlersInstalled) return;
|
if (signalCleanupHandlersInstalled) return;
|
||||||
signalCleanupHandlersInstalled = true;
|
signalCleanupHandlersInstalled = true;
|
||||||
for (const signal of CLEANUP_SIGNALS) {
|
for (const signal of CLEANUP_SIGNALS) {
|
||||||
|
const listener = () => {
|
||||||
|
void handleSignalCleanup(signal);
|
||||||
|
};
|
||||||
try {
|
try {
|
||||||
Deno.addSignalListener(signal, () => {
|
Deno.addSignalListener(signal, listener);
|
||||||
void handleSignalCleanup(signal);
|
signalCleanupHandlers.set(signal, listener);
|
||||||
});
|
|
||||||
} catch {
|
} catch {
|
||||||
// Unsupported signal on this platform.
|
// Unsupported signal on this platform.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function removeSignalCleanupHandlers(): void {
|
||||||
|
if (!signalCleanupHandlersInstalled) return;
|
||||||
|
for (const [signal, listener] of signalCleanupHandlers) {
|
||||||
|
try {
|
||||||
|
Deno.removeSignalListener(signal, listener);
|
||||||
|
} catch {
|
||||||
|
// Ignore if already removed or unsupported.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
signalCleanupHandlers.clear();
|
||||||
|
signalCleanupHandlersInstalled = false;
|
||||||
|
}
|
||||||
|
|
||||||
function trackContainer(container: string): void {
|
function trackContainer(container: string): void {
|
||||||
ensureSignalCleanupHandlers();
|
ensureSignalCleanupHandlers();
|
||||||
trackedContainers.add(container);
|
trackedContainers.add(container);
|
||||||
@@ -234,6 +250,9 @@ function trackContainer(container: string): void {
|
|||||||
|
|
||||||
function untrackContainer(container: string): void {
|
function untrackContainer(container: string): void {
|
||||||
trackedContainers.delete(container);
|
trackedContainers.delete(container);
|
||||||
|
if (trackedContainers.size === 0) {
|
||||||
|
removeSignalCleanupHandlers();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function sleep(ms: number): Promise<void> {
|
function sleep(ms: number): Promise<void> {
|
||||||
|
|||||||
Reference in New Issue
Block a user