From cfc1ce34d4dbebb7f4a75fcf40f6f560e9d073cd Mon Sep 17 00:00:00 2001 From: Dan Lynch Date: Thu, 5 Feb 2026 02:18:33 +0000 Subject: [PATCH 1/2] fix(graphile-cache): remove redundant serv.release() to prevent double-release error PostGraphile v5's pgl.release() internally calls serv.release() on the grafserv instance. Calling serv.release() explicitly before pgl.release() causes a 'Release has already been called' error since grafserv throws when release() is called twice. The fix removes the explicit serv.release() call and lets pgl.release() handle the grafserv cleanup internally. --- graphile/graphile-cache/src/graphile-cache.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/graphile/graphile-cache/src/graphile-cache.ts b/graphile/graphile-cache/src/graphile-cache.ts index 43b944801..fdd2d9dd5 100644 --- a/graphile/graphile-cache/src/graphile-cache.ts +++ b/graphile/graphile-cache/src/graphile-cache.ts @@ -114,17 +114,13 @@ const disposeEntry = async (entry: GraphileCacheEntry, key: string): Promise((resolve) => { entry.httpServer.close(() => resolve()); }); } - // Release PostGraphile instance + // Release PostGraphile instance (this also releases grafserv internally) if (entry.pgl) { await entry.pgl.release(); } From 611dec97e0a9e71e35a503dc36bf02b277b3b2c5 Mon Sep 17 00:00:00 2001 From: Dan Lynch Date: Thu, 5 Feb 2026 04:30:13 +0000 Subject: [PATCH 2/2] docs: update disposeEntry docstring to reflect removal of explicit serv.release() --- graphile/graphile-cache/src/graphile-cache.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/graphile/graphile-cache/src/graphile-cache.ts b/graphile/graphile-cache/src/graphile-cache.ts index fdd2d9dd5..fbb9a4a57 100644 --- a/graphile/graphile-cache/src/graphile-cache.ts +++ b/graphile/graphile-cache/src/graphile-cache.ts @@ -98,9 +98,8 @@ const manualEvictionKeys = new Set(); * Dispose a PostGraphile v5 cache entry * * Properly releases resources by: - * 1. Releasing the grafserv instance - * 2. Closing the HTTP server if listening - * 3. Releasing the PostGraphile instance + * 1. Closing the HTTP server if listening + * 2. Releasing the PostGraphile instance (which internally releases grafserv) * * Uses disposedKeys set to prevent double-disposal when closeAllCaches() * explicitly disposes entries and then clear() triggers the dispose callback.