This commit is contained in:
Pingan Yi 2014-08-13 16:14:52 +08:00
commit f38f6371a3
2 changed files with 8 additions and 2 deletions

View file

@ -383,6 +383,10 @@ namespace Swig {
class LocalRefGuard {
JNIEnv* jenv_;
jobject jobj_;
// non-copyable
LocalRefGuard(const LocalRefGuard &);
LocalRefGuard &operator=(const LocalRefGuard &);
public:
LocalRefGuard(JNIEnv* jenv, jobject jobj): jenv_(jenv), jobj_(jobj) {}
~LocalRefGuard() { if (jobj_) jenv_->DeleteLocalRef(jobj_); }

View file

@ -49,7 +49,8 @@ class string;
jenv->ReleaseStringUTFChars($input, $1_pstr); %}
%typemap(directorin,descriptor="Ljava/lang/String;") string
%{ $input = jenv->NewStringUTF($1.c_str()); %}
%{ $input = jenv->NewStringUTF($1.c_str());
Swig::LocalRefGuard refGuard_$input(jenv, $input); %}
%typemap(out) string
%{ $result = jenv->NewStringUTF($1.c_str()); %}
@ -98,7 +99,8 @@ class string;
jenv->ReleaseStringUTFChars($input, $1_pstr); %}
%typemap(directorin,descriptor="Ljava/lang/String;") const string &
%{ $input = jenv->NewStringUTF($1.c_str()); %}
%{ $input = jenv->NewStringUTF($1.c_str());
Swig::LocalRefGuard refGuard_$input(jenv, $input); %}
%typemap(out) const string &
%{ $result = jenv->NewStringUTF($1->c_str()); %}