mirror of
https://anongit.gentoo.org/git/repo/gentoo.git
synced 2025-12-17 15:43:55 +00:00
Closes: https://bugs.gentoo.org/867862 Package-Manager: Portage-3.0.30, Repoman-3.0.3 Signed-off-by: Akinori Hattori <hattya@gentoo.org>
78 lines
2.5 KiB
Diff
78 lines
2.5 KiB
Diff
--- a/javanative/Database.java
|
|
+++ b/javanative/Database.java
|
|
@@ -135,7 +135,7 @@
|
|
/** last happened error code */
|
|
private int ecode;
|
|
/** callback function to inform of database events */
|
|
- private DatabaseInformer informer;
|
|
+ private long informer;
|
|
//----------------------------------------------------------------
|
|
// constructors and finalizers
|
|
//----------------------------------------------------------------
|
|
--- a/javanative/database.c
|
|
+++ b/javanative/database.c
|
|
@@ -19,7 +19,7 @@
|
|
|
|
|
|
/* global variables */
|
|
-JNIEnv *infoenv = NULL;
|
|
+static JavaVM* jvm = NULL;
|
|
|
|
|
|
/* private function prototypes */
|
|
@@ -181,8 +181,8 @@
|
|
err = TRUE;
|
|
}
|
|
(*env)->SetLongField(env, obj, fid, 0);
|
|
- fid = (*env)->GetFieldID(env, cls, "informer", "L" CLSDBINFO ";");
|
|
- if((infoobj = (*env)->GetObjectField(env, obj, fid)) != NULL)
|
|
+ fid = (*env)->GetFieldID(env, cls, "informer", "J");
|
|
+ if((infoobj = (jobject)(*env)->GetLongField(env, obj, fid)) != NULL)
|
|
(*env)->DeleteGlobalRef(env, infoobj);
|
|
(*env)->SetObjectField(env, obj, fid, NULL);
|
|
return err ? FALSE : TRUE;
|
|
@@ -735,16 +735,17 @@
|
|
throwillarg(env);
|
|
return;
|
|
}
|
|
- fid = (*env)->GetFieldID(env, cls, "informer", "L" CLSDBINFO ";");
|
|
- if((oldobj = (*env)->GetObjectField(env, obj, fid)) != NULL)
|
|
+ fid = (*env)->GetFieldID(env, cls, "informer", "J");
|
|
+ if((oldobj = (jobject)(*env)->GetLongField(env, obj, fid)) != NULL)
|
|
(*env)->DeleteGlobalRef(env, oldobj);
|
|
(*env)->SetObjectField(env, obj, fid, NULL);
|
|
if(!(informer = (*env)->NewGlobalRef(env, informer))){
|
|
throwoutmem(env);
|
|
return;
|
|
}
|
|
- (*env)->SetObjectField(env, obj, fid, informer);
|
|
- infoenv = env;
|
|
+ (*env)->SetLongField(env, obj, fid, (PTRNUM)informer);
|
|
+ if(jvm == NULL)
|
|
+ (*env)->GetJavaVM(env, &jvm);
|
|
est_mtdb_set_informer((ESTMTDB *)(PTRNUM)coreptr, dbinform, informer);
|
|
}
|
|
|
|
@@ -767,10 +768,12 @@
|
|
|
|
/* callback function for database events */
|
|
static void dbinform(const char *message, void *opaque){
|
|
+ JNIEnv *infoenv;
|
|
jstring msgobj;
|
|
jobject opobj;
|
|
jclass cls;
|
|
jmethodID mid;
|
|
+ (*jvm)->GetEnv(jvm, (void **)&infoenv, JNI_VERSION_1_8);
|
|
if(!(msgobj = (*infoenv)->NewStringUTF(infoenv, message))) return;
|
|
opobj = (jobject)opaque;
|
|
cls = (*infoenv)->GetObjectClass(infoenv, opobj);
|
|
--- a/javanative/myconf.h
|
|
+++ b/javanative/myconf.h
|
|
@@ -69,7 +69,6 @@
|
|
#define CLSDOC "estraier/Document"
|
|
#define CLSCOND "estraier/Condition"
|
|
#define CLSDB "estraier/Database"
|
|
-#define CLSDBINFO "estraier/DatabaseInformer"
|
|
#define CLSRES "estraier/Result"
|
|
|
|
|