From 673c5bd894b666ef56f076219ebfd632ff3b4bbb Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Sat, 19 Sep 2026 21:13:03 -0400 Subject: [PATCH] fix memory leaks Oops! They were pretty slow, but still adds up. This might fix the bug that was stopping Nexus from working on GraphineOS. --- gomuks | 2 +- lib/controllers/client.dart | 25 +++++++++++++++---------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/gomuks b/gomuks index 9e45ee4..c200702 160000 --- a/gomuks +++ b/gomuks @@ -1 +1 @@ -Subproject commit 9e45ee426cc8be0bfada269f4abc4957c30e994e +Subproject commit c20070298d450cc02f465a503a5a52fea74af0d5 diff --git a/lib/controllers/client.dart b/lib/controllers/client.dart index ee4e0a0..cf49373 100644 --- a/lib/controllers/client.dart +++ b/lib/controllers/client.dart @@ -60,10 +60,12 @@ class ClientController extends AsyncNotifier { "GOMUKS_CACHE_HOME": (await getApplicationCacheDirectory()).path, }; for (final MapEntry(:key, :value) in env.entries) { - GomuksSetEnv( - key.toNativeUtf8().cast(), - value.toNativeUtf8().cast(), - ); + final keyPtr = key.toNativeUtf8().cast(); + final valuePtr = value.toNativeUtf8().cast(); + GomuksSetEnv(keyPtr, valuePtr); + calloc + ..free(keyPtr) + ..free(valuePtr); } } final handle = await Isolate.run(GomuksInit); @@ -193,14 +195,17 @@ class ClientController extends AsyncNotifier { return response == null ? null : .fromJson(response); } - Future _sendCommand( + dynamic _sendCommand( String command, [ Map data = const {}, - ]) => callGomuksMethod( - data, - (handle, data) async => - GomuksSubmitCommand(handle, command.toNativeUtf8().cast(), data), - ); + ]) => callGomuksMethod(data, (handle, data) { + final commandPointer = command.toNativeUtf8().cast(); + try { + return GomuksSubmitCommand(handle, commandPointer, data); + } finally { + calloc.free(commandPointer); + } + }); Future redactEvent(RedactEventRequest report) => _sendCommand("redact_event", report.toJson());