aboutsummaryrefslogtreecommitdiff
path: root/Examples/test-suite/java/director_ownership_runme.java
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite/java/director_ownership_runme.java')
-rw-r--r--Examples/test-suite/java/director_ownership_runme.java42
1 files changed, 42 insertions, 0 deletions
diff --git a/Examples/test-suite/java/director_ownership_runme.java b/Examples/test-suite/java/director_ownership_runme.java
new file mode 100644
index 000000000..c038f56a4
--- /dev/null
+++ b/Examples/test-suite/java/director_ownership_runme.java
@@ -0,0 +1,42 @@
+import director_ownership.*;
+
+public class director_ownership_runme {
+
+ static {
+ try {
+ System.loadLibrary("director_ownership");
+ } catch (UnsatisfiedLinkError e) {
+ System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
+ System.exit(1);
+ }
+ }
+
+ public static void set_content_and_release(Container container, ContentBase content) {
+ content.swigReleaseOwnership();
+ container.set_content(content);
+ }
+
+ public static void main(String argv[]) {
+
+ Container container = new Container();
+
+ // make a content in java (cMemoryOwn true)
+ ContentBase content_java = new ContentDerived();
+
+ // make a content in c++ (cMemoryOwn true)
+ ContentBase content_cpp = director_ownership.make_content();
+
+ set_content_and_release(container, content_java);
+ if (!container.get_content().get_name().equals("ContentDerived"))
+ throw new RuntimeException("did not get ContentDerived");
+
+ // when swigReleaseOwnership() is called on content_cpp, swig tries a static_cast to director and calls the method
+ // director->swig_java_change_ownership. The content created in c++ native library is not a director, therefore a
+ // segfault may occur.
+ // With a check done using dynamic_cast this issue could be avoided.
+ set_content_and_release(container, content_cpp);
+ if (!container.get_content().get_name().equals("ContentDerived"))
+ throw new RuntimeException("did not get ContentDerived");
+ }
+}
+