diff --git a/core/trino-main/src/main/java/io/trino/execution/buffer/SpoolingExchangeOutputBuffer.java b/core/trino-main/src/main/java/io/trino/execution/buffer/SpoolingExchangeOutputBuffer.java index ca1a4d23d2ea..2d5f0bb7146e 100644 --- a/core/trino-main/src/main/java/io/trino/execution/buffer/SpoolingExchangeOutputBuffer.java +++ b/core/trino-main/src/main/java/io/trino/execution/buffer/SpoolingExchangeOutputBuffer.java @@ -203,7 +203,7 @@ public void setNoMorePages() stateMachine.finish(); } exchangeSink = null; - updateMemoryUsage(0); + forceFreeMemory(); }); } @@ -234,7 +234,7 @@ public void abort() log.warn(failure, "Error aborting exchange sink"); } exchangeSink = null; - updateMemoryUsage(0); + forceFreeMemory(); }); } @@ -272,6 +272,14 @@ private void updatePeakMemoryUsage(long bytes) } } + private void forceFreeMemory() + { + LocalMemoryContext context = getSystemMemoryContextOrNull(); + if (context != null) { + context.close(); + } + } + private LocalMemoryContext getSystemMemoryContextOrNull() { try {