Commit ebd95c1c authored by Nikolay Igotti's avatar Nikolay Igotti

Even more careful search for objc internals.

parent 371455b9
...@@ -113,15 +113,19 @@ JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_makeMeta ...@@ -113,15 +113,19 @@ JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_makeMeta
return (jlong) renderTarget; return (jlong) renderTarget;
} }
typedef void* (*objc_autoreleasePoolPush_t)(void); static void* objc_library() {
typedef void (*objc_autoreleasePoolPop_t)(void*); void* result = dlopen("/usr/lib/libobjc.dylib", RTLD_LAZY | RTLD_LOCAL);
return result != NULL ? result : RTLD_DEFAULT;
}
JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_startRendering( JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_startRendering(
JNIEnv * env, jobject redrawer) JNIEnv * env, jobject redrawer)
{ {
typedef void* (*objc_autoreleasePoolPush_t)(void);
static objc_autoreleasePoolPush_t objc_autoreleasePoolPush = NULL; static objc_autoreleasePoolPush_t objc_autoreleasePoolPush = NULL;
if (objc_autoreleasePoolPush == NULL) { if (objc_autoreleasePoolPush == NULL) {
objc_autoreleasePoolPush = (objc_autoreleasePoolPush_t)dlsym(RTLD_DEFAULT, "objc_autoreleasePoolPush"); objc_autoreleasePoolPush = (objc_autoreleasePoolPush_t)dlsym(objc_library(), "objc_autoreleasePoolPush");
assert(objc_autoreleasePoolPush != NULL);
} }
return (jlong)objc_autoreleasePoolPush(); return (jlong)objc_autoreleasePoolPush();
} }
...@@ -129,9 +133,11 @@ JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_startRen ...@@ -129,9 +133,11 @@ JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_startRen
JNIEXPORT void JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_endRendering( JNIEXPORT void JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_endRendering(
JNIEnv * env, jobject redrawer, jlong handle) JNIEnv * env, jobject redrawer, jlong handle)
{ {
typedef void (*objc_autoreleasePoolPop_t)(void*);
static objc_autoreleasePoolPop_t objc_autoreleasePoolPop = NULL; static objc_autoreleasePoolPop_t objc_autoreleasePoolPop = NULL;
if (objc_autoreleasePoolPop == NULL) { if (objc_autoreleasePoolPop == NULL) {
objc_autoreleasePoolPop = (objc_autoreleasePoolPop_t)dlsym(RTLD_DEFAULT, "objc_autoreleasePoolPop"); objc_autoreleasePoolPop = (objc_autoreleasePoolPop_t)dlsym(objc_library(), "objc_autoreleasePoolPop");
assert(objc_autoreleasePoolPop != NULL);
} }
objc_autoreleasePoolPop((void*)handle); objc_autoreleasePoolPop((void*)handle);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment