Pingan Yi 2014-05-04 19:10:44 +08:00
commit b79646ce4c
2 changed files with 9 additions and 0 deletions

View file

@ -380,5 +380,12 @@ namespace Swig {
return matches;
}
class LocalRefGuard {
JNIEnv* jenv_;
jobject jobj_;
public:
LocalRefGuard(JNIEnv* jenv, jobject jobj): jenv_(jenv), jobj_(jobj) {}
~LocalRefGuard() { if (jobj_) jenv_->DeleteLocalRef(jobj_); }
};
}

View file

@ -405,6 +405,7 @@ SWIGINTERN const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
$input = JCALL1(NewStringUTF, jenv, (const char *)$1);
if (!$input) return $null;
}
Swig::LocalRefGuard refGuard_$input(jenv, $input);
}
%typemap(freearg, noblock=1) char * { if ($1) JCALL2(ReleaseStringUTFChars, jenv, $input, (const char *)$1); }
@ -731,6 +732,7 @@ SWIGINTERN const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
$input = JCALL1(NewStringUTF, jenv, (const char *)$1);
if (!$input) return $null;
}
Swig::LocalRefGuard refGuard_$input(jenv, $input);
}
%typemap(argout) char[ANY], char[] ""