naett.c

Tiny cross-platform HTTP / HTTPS client library in C.
git clone git://git.finwo.net/lib/naett.c
Log | Files | Refs | README | LICENSE

commit e58caa21f82c916ce34bc2c5153f3c099ee9dee2
parent 6ddfee14bf54e9ae39e9413a615aee452706dec6
Author: Erik Agsjö <erik.agsjo@gmail.com>
Date:   Sun, 17 Sep 2023 20:59:38 +0200

Fix a bunch of android resource leaks

Diffstat:
Msrc/naett_android.c | 10+++++++---
1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/naett_android.c b/src/naett_android.c @@ -48,7 +48,9 @@ static int catch (JNIEnv* env) { static jmethodID getMethod(JNIEnv* env, jobject instance, const char* method, const char* sig) { jclass clazz = (*env)->GetObjectClass(env, instance); - return (*env)->GetMethodID(env, clazz, method, sig); + jmethodID id = (*env)->GetMethodID(env, clazz, method, sig); + (*env)->DeleteLocalRef(env, clazz); + return id; } static jobject call(JNIEnv* env, jobject instance, const char* method, const char* sig, ...) { @@ -83,14 +85,17 @@ void naettPlatformInit(naettInitData initData) { int naettPlatformInitRequest(InternalRequest* req) { JNIEnv* env = getEnv(); + (*env)->PushLocalFrame(env, 10); jclass URL = (*env)->FindClass(env, "java/net/URL"); jmethodID newURL = (*env)->GetMethodID(env, URL, "<init>", "(Ljava/lang/String;)V"); jstring urlString = (*env)->NewStringUTF(env, req->url); jobject url = (*env)->NewObject(env, URL, newURL, urlString); if (catch (env)) { + (*env)->PopLocalFrame(env, NULL); return 0; } req->urlObject = (*env)->NewGlobalRef(env, url); + (*env)->PopLocalFrame(env, NULL); return 1; } @@ -101,7 +106,7 @@ static void* processRequest(void* data) { InternalRequest* req = res->request; JNIEnv* env = getEnv(); - (*env)->PushLocalFrame(env, 10); + (*env)->PushLocalFrame(env, 100); jobject connection = call(env, req->urlObject, "openConnection", "()Ljava/net/URLConnection;"); if (catch (env)) { @@ -243,7 +248,6 @@ finally: JavaVM* vm = getVM(); (*env)->ExceptionClear(env); (*vm)->DetachCurrentThread(vm); - res->workerThread = 0; return NULL; }