aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2012-08-07 15:51:00 +0200
committerTobias Brunner <tobias@strongswan.org>2012-08-13 11:00:26 +0200
commit529c8c88a36ec2251ac32edcee0710838dece2bb (patch)
treec3fd972b4c6e9b51bb2296ece5bc8ffaa26c50ce /src
parenta304874319225eabbb8bae3aa96004f384732ccc (diff)
downloadstrongswan-529c8c88a36ec2251ac32edcee0710838dece2bb.tar.bz2
strongswan-529c8c88a36ec2251ac32edcee0710838dece2bb.tar.xz
Keep a global reference to the CharonVpnService object in charonservice
Diffstat (limited to 'src')
-rw-r--r--src/frontends/android/jni/libandroidbridge/charonservice.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/frontends/android/jni/libandroidbridge/charonservice.c b/src/frontends/android/jni/libandroidbridge/charonservice.c
index 671561f5f..75d0da693 100644
--- a/src/frontends/android/jni/libandroidbridge/charonservice.c
+++ b/src/frontends/android/jni/libandroidbridge/charonservice.c
@@ -41,6 +41,11 @@ struct private_charonservice_t {
* public interface
*/
charonservice_t public;
+
+ /**
+ * CharonVpnService reference
+ */
+ jobject vpn_service;
};
/**
@@ -86,13 +91,14 @@ static void dbg_android(debug_t group, level_t level, char *fmt, ...)
/**
* Initialize the charonservice object
*/
-static void charonservice_init()
+static void charonservice_init(JNIEnv *env, jobject service)
{
private_charonservice_t *this;
INIT(this,
.public = {
},
+ .vpn_service = (*env)->NewGlobalRef(env, service),
);
charonservice = &this->public;
@@ -103,10 +109,11 @@ static void charonservice_init()
/**
* Deinitialize the charonservice object
*/
-static void charonservice_deinit()
+static void charonservice_deinit(JNIEnv *env)
{
private_charonservice_t *this = (private_charonservice_t*)charonservice;
+ (*env)->DeleteGlobalRef(env, this->vpn_service);
free(this);
charonservice = NULL;
}
@@ -153,13 +160,13 @@ JNI_METHOD(CharonVpnService, initializeCharon, void)
return;
}
- charonservice_init();
+ charonservice_init(env, this);
if (!libcharon_init("charon") ||
!charon->initialize(charon, PLUGINS))
{
libcharon_deinit();
- charonservice_deinit();
+ charonservice_deinit(env);
libipsec_deinit();
libhydra_deinit();
library_deinit();
@@ -186,7 +193,7 @@ JNI_METHOD(CharonVpnService, initializeCharon, void)
JNI_METHOD(CharonVpnService, deinitializeCharon, void)
{
libcharon_deinit();
- charonservice_deinit();
+ charonservice_deinit(env);
libipsec_deinit();
libhydra_deinit();
library_deinit();