summaryrefslogtreecommitdiff
path: root/Lib/java
diff options
context:
space:
mode:
authorPingan Yi <pingany@opera.com>2014-08-13 16:14:52 +0800
committerPingan Yi <pingany@opera.com>2014-08-13 16:14:57 +0800
commitf38f6371a34a153531a7f8d5351de15621ed0387 (patch)
treebce202c2623f273ddcee8f6a7f202f30c1909f53 /Lib/java
parentb79646ce4c649c838aa848674cdea5a83fb77694 (diff)
downloadswig-f38f6371a34a153531a7f8d5351de15621ed0387.tar.gz
fixup! Patch of http://sourceforge.net/p/swig/mailman/message/29816385
Diffstat (limited to 'Lib/java')
-rw-r--r--Lib/java/director.swg4
-rw-r--r--Lib/java/std_string.i6
2 files changed, 8 insertions, 2 deletions
diff --git a/Lib/java/director.swg b/Lib/java/director.swg
index 7f0fd3933..24460676f 100644
--- a/Lib/java/director.swg
+++ b/Lib/java/director.swg
@@ -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_); }
diff --git a/Lib/java/std_string.i b/Lib/java/std_string.i
index 5ad7d30bc..322d0da12 100644
--- a/Lib/java/std_string.i
+++ b/Lib/java/std_string.i
@@ -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()); %}