From a63d293c6e17ee238b9c4d4b53ca5642a3e82db9 Mon Sep 17 00:00:00 2001 From: Andy Czerwonka Date: Wed, 29 Jul 2026 13:43:01 -0600 Subject: [PATCH] PNE-8934: Fix native memory leak in EcosSolve JNI wrapper. We're now releasing the 10 read-only input array pins that were previously never freed. Bumps to 0.0.14. --- build.sbt | 2 +- src/native/NativeECOS.c | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index b7bbb73..54d85fc 100644 --- a/build.sbt +++ b/build.sbt @@ -1,7 +1,7 @@ import Dependencies._ ThisBuild / scalaVersion := "2.13.15" -ThisBuild / version := "0.0.12" +ThisBuild / version := "0.0.14" ThisBuild / versionScheme := Some("early-semver") ThisBuild / organization := "io.citrine" ThisBuild / organizationName := "Citrine Informatics" diff --git a/src/native/NativeECOS.c b/src/native/NativeECOS.c index 408390c..89f6af2 100644 --- a/src/native/NativeECOS.c +++ b/src/native/NativeECOS.c @@ -116,6 +116,18 @@ JNIEXPORT jint JNICALL Java_io_citrine_ecos_NativeECOS_EcosSolve(JNIEnv *env, jo ECOS_cleanup(wspace, 0); } + /* JNI_ABORT: inputs are read-only, discard any copy without writing back. */ + (*env)->ReleaseIntArrayElements(env, q, qPtr, JNI_ABORT); + (*env)->ReleaseDoubleArrayElements(env, Gpr, GprPtr, JNI_ABORT); + (*env)->ReleaseIntArrayElements(env, Gjc, GjcPtr, JNI_ABORT); + (*env)->ReleaseIntArrayElements(env, Gir, GirPtr, JNI_ABORT); + (*env)->ReleaseDoubleArrayElements(env, Apr, AprPtr, JNI_ABORT); + (*env)->ReleaseIntArrayElements(env, Ajc, AjcPtr, JNI_ABORT); + (*env)->ReleaseIntArrayElements(env, Air, AirPtr, JNI_ABORT); + (*env)->ReleaseDoubleArrayElements(env, c, cPtr, JNI_ABORT); + (*env)->ReleaseDoubleArrayElements(env, h, hPtr, JNI_ABORT); + (*env)->ReleaseDoubleArrayElements(env, b, bPtr, JNI_ABORT); + return exitflag; }