fix JNI use of incStrong/decStrong
Change-Id: Ia11b404dea483dc19bbc30f4d7bcff516655e180
diff --git a/core/jni/android/graphics/SurfaceTexture.cpp b/core/jni/android/graphics/SurfaceTexture.cpp
index 296d9b2..753f5dc 100644
--- a/core/jni/android/graphics/SurfaceTexture.cpp
+++ b/core/jni/android/graphics/SurfaceTexture.cpp
@@ -53,10 +53,10 @@
GLConsumer* const p =
(GLConsumer*)env->GetIntField(thiz, fields.surfaceTexture);
if (surfaceTexture.get()) {
- surfaceTexture->incStrong(thiz);
+ surfaceTexture->incStrong((void*)SurfaceTexture_setSurfaceTexture);
}
if (p) {
- p->decStrong(thiz);
+ p->decStrong((void*)SurfaceTexture_setSurfaceTexture);
}
env->SetIntField(thiz, fields.surfaceTexture, (int)surfaceTexture.get());
}
@@ -68,10 +68,10 @@
(GLConsumer::FrameAvailableListener*)
env->GetIntField(thiz, fields.frameAvailableListener);
if (listener.get()) {
- listener->incStrong(thiz);
+ listener->incStrong((void*)SurfaceTexture_setSurfaceTexture);
}
if (p) {
- p->decStrong(thiz);
+ p->decStrong((void*)SurfaceTexture_setSurfaceTexture);
}
env->SetIntField(thiz, fields.frameAvailableListener, (int)listener.get());
}
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp
index 362d9a4..6fbaaf2 100644
--- a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -496,7 +496,7 @@
// We use a weak reference so the Camera object can be garbage collected.
// The reference is only used as a proxy for callbacks.
sp<JNICameraContext> context = new JNICameraContext(env, weak_this, clazz, camera);
- context->incStrong(thiz);
+ context->incStrong((void*)android_hardware_Camera_native_setup);
camera->setListener(context);
// save context in opaque field
@@ -534,7 +534,7 @@
}
// remove context to prevent further Java access
- context->decStrong(thiz);
+ context->decStrong((void*)android_hardware_Camera_native_setup);
}
}
diff --git a/core/jni/android_hardware_SensorManager.cpp b/core/jni/android_hardware_SensorManager.cpp
index e8a6569..3083cb1 100644
--- a/core/jni/android_hardware_SensorManager.cpp
+++ b/core/jni/android_hardware_SensorManager.cpp
@@ -176,7 +176,7 @@
}
sp<Receiver> receiver = new Receiver(queue, messageQueue, eventQ, scratch);
- receiver->incStrong(clazz);
+ receiver->incStrong((void*)nativeInitSensorEventQueue);
return jint(receiver.get());
}
@@ -193,7 +193,7 @@
static void nativeDestroySensorEventQueue(JNIEnv *env, jclass clazz, jint eventQ, jint handle) {
sp<Receiver> receiver(reinterpret_cast<Receiver *>(eventQ));
receiver->destroy();
- receiver->decStrong(clazz);
+ receiver->decStrong((void*)nativeInitSensorEventQueue);
}
diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp
index da2f874..197d240 100644
--- a/core/jni/android_media_AudioRecord.cpp
+++ b/core/jni/android_media_AudioRecord.cpp
@@ -154,10 +154,10 @@
sp<AudioRecord> old =
(AudioRecord*)env->GetIntField(thiz, javaAudioRecordFields.nativeRecorderInJavaObj);
if (ar.get()) {
- ar->incStrong(thiz);
+ ar->incStrong((void*)setAudioRecord);
}
if (old != 0) {
- old->decStrong(thiz);
+ old->decStrong((void*)setAudioRecord);
}
env->SetIntField(thiz, javaAudioRecordFields.nativeRecorderInJavaObj, (int)ar.get());
return old;
diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp
index 9a3736c..e2d34c9 100644
--- a/core/jni/android_media_AudioTrack.cpp
+++ b/core/jni/android_media_AudioTrack.cpp
@@ -191,10 +191,10 @@
sp<AudioTrack> old =
(AudioTrack*)env->GetIntField(thiz, javaAudioTrackFields.nativeTrackInJavaObj);
if (at.get()) {
- at->incStrong(thiz);
+ at->incStrong((void*)setAudioTrack);
}
if (old != 0) {
- old->decStrong(thiz);
+ old->decStrong((void*)setAudioTrack);
}
env->SetIntField(thiz, javaAudioTrackFields.nativeTrackInJavaObj, (int)at.get());
return old;
diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp
index 881d9a0..a7eede2 100644
--- a/core/jni/android_util_Binder.cpp
+++ b/core/jni/android_util_Binder.cpp
@@ -586,7 +586,7 @@
LOGDEATH("objectForBinder %p: created new proxy %p !\n", val.get(), object);
// The proxy holds a reference to the native object.
env->SetIntField(object, gBinderProxyOffsets.mObject, (int)val.get());
- val->incStrong(object);
+ val->incStrong((void*)javaObjectForIBinder);
// The native object needs to hold a weak reference back to the
// proxy, so we can retrieve the same proxy if it is still active.
@@ -1187,7 +1187,7 @@
env->SetIntField(obj, gBinderProxyOffsets.mObject, 0);
env->SetIntField(obj, gBinderProxyOffsets.mOrgue, 0);
drl->decStrong((void*)javaObjectForIBinder);
- b->decStrong(obj);
+ b->decStrong((void*)javaObjectForIBinder);
IPCThreadState::self()->flushCommands();
}
diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp
index 1ffb1b8..0104f4b 100644
--- a/core/jni/android_view_Surface.cpp
+++ b/core/jni/android_view_Surface.cpp
@@ -76,6 +76,9 @@
// ----------------------------------------------------------------------------
+// this is just a pointer we use to pass to inc/decStrong
+static const void *sRefBaseOwner;
+
bool android_view_Surface_isInstanceOf(JNIEnv* env, jobject obj) {
return env->IsInstanceOf(obj, gSurfaceClassInfo.clazz);
}
@@ -109,7 +112,7 @@
}
return NULL;
}
- surface->incStrong(surfaceObj);
+ surface->incStrong(&sRefBaseOwner);
return surfaceObj;
}
@@ -137,18 +140,18 @@
return 0;
}
- surface->incStrong(clazz);
+ surface->incStrong(&sRefBaseOwner);
return int(surface.get());
}
static void nativeRelease(JNIEnv* env, jclass clazz, jint nativeObject) {
sp<Surface> sur(reinterpret_cast<Surface *>(nativeObject));
- sur->decStrong(clazz);
+ sur->decStrong(&sRefBaseOwner);
}
static void nativeDestroy(JNIEnv* env, jclass clazz, jint nativeObject) {
sp<Surface> sur(reinterpret_cast<Surface *>(nativeObject));
- sur->decStrong(clazz);
+ sur->decStrong(&sRefBaseOwner);
}
static jboolean nativeIsValid(JNIEnv* env, jclass clazz, jint nativeObject) {
@@ -309,12 +312,12 @@
sp<SurfaceControl> ctrl(reinterpret_cast<SurfaceControl *>(surfaceControlNativeObj));
sp<Surface> other(ctrl->getSurface());
if (other != NULL) {
- other->incStrong(clazz);
+ other->incStrong(&sRefBaseOwner);
}
sp<Surface> sur(reinterpret_cast<Surface *>(nativeObject));
if (sur != NULL) {
- sur->decStrong(clazz);
+ sur->decStrong(&sRefBaseOwner);
}
return int(other.get());
@@ -329,11 +332,11 @@
}
sp<Surface> self(reinterpret_cast<Surface *>(nativeObject));
if (self != NULL) {
- self->decStrong(clazz);
+ self->decStrong(&sRefBaseOwner);
}
sp<Surface> sur(Surface::readFromParcel(*parcel));
if (sur != NULL) {
- sur->incStrong(clazz);
+ sur->incStrong(&sRefBaseOwner);
}
return int(sur.get());
}
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index d94d39d..ec10536 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -132,19 +132,19 @@
jniThrowException(env, OutOfResourcesException, NULL);
return 0;
}
- surface->incStrong(clazz);
+ surface->incStrong((void *)nativeCreate);
return int(surface.get());
}
static void nativeRelease(JNIEnv* env, jclass clazz, jint nativeObject) {
sp<SurfaceControl> ctrl(reinterpret_cast<SurfaceControl *>(nativeObject));
- ctrl->decStrong(clazz);
+ ctrl->decStrong((void *)nativeCreate);
}
static void nativeDestroy(JNIEnv* env, jclass clazz, jint nativeObject) {
sp<SurfaceControl> ctrl(reinterpret_cast<SurfaceControl *>(nativeObject));
ctrl->clear();
- ctrl->decStrong(clazz);
+ ctrl->decStrong((void *)nativeCreate);
}
static inline SkBitmap::Config convertPixelFormat(PixelFormat format) {
diff --git a/core/jni/android_view_SurfaceSession.cpp b/core/jni/android_view_SurfaceSession.cpp
index 1494bc5..87e339c 100644
--- a/core/jni/android_view_SurfaceSession.cpp
+++ b/core/jni/android_view_SurfaceSession.cpp
@@ -41,13 +41,13 @@
static jint nativeCreate(JNIEnv* env, jclass clazz) {
SurfaceComposerClient* client = new SurfaceComposerClient();
- client->incStrong(clazz);
+ client->incStrong((void*)nativeCreate);
return reinterpret_cast<jint>(client);
}
static void nativeDestroy(JNIEnv* env, jclass clazz, jint ptr) {
SurfaceComposerClient* client = reinterpret_cast<SurfaceComposerClient*>(ptr);
- client->decStrong(clazz);
+ client->decStrong((void*)nativeCreate);
}
static void nativeKill(JNIEnv* env, jclass clazz, jint ptr) {
diff --git a/core/jni/android_view_TextureView.cpp b/core/jni/android_view_TextureView.cpp
index 8a89db5..5baae84 100644
--- a/core/jni/android_view_TextureView.cpp
+++ b/core/jni/android_view_TextureView.cpp
@@ -109,7 +109,7 @@
sp<GLConsumer> glConsumer(SurfaceTexture_getSurfaceTexture(env, surface));
sp<ANativeWindow> window = new Surface(glConsumer->getBufferQueue());
- window->incStrong(0);
+ window->incStrong((void*)android_view_TextureView_createNativeWindow);
SET_INT(textureView, gTextureViewClassInfo.nativeWindow, jint(window.get()));
}
@@ -120,7 +120,7 @@
if (nativeWindow) {
sp<ANativeWindow> window(nativeWindow);
- window->decStrong(0);
+ window->decStrong((void*)android_view_TextureView_createNativeWindow);
SET_INT(textureView, gTextureViewClassInfo.nativeWindow, 0);
}
}