From: <gof...@us...> - 2008-03-04 11:20:43
|
Revision: 4697 http://octave.svn.sourceforge.net/octave/?rev=4697&view=rev Author: goffioul Date: 2008-03-04 03:20:47 -0800 (Tue, 04 Mar 2008) Log Message: ----------- slightly slower but safer implementation that does not cache JNIEnv* object Modified Paths: -------------- trunk/octave-forge/extra/java/src/__java__.cc trunk/octave-forge/extra/java/src/__java__.h Modified: trunk/octave-forge/extra/java/src/__java__.cc =================================================================== --- trunk/octave-forge/extra/java/src/__java__.cc 2008-03-03 15:57:50 UTC (rev 4696) +++ trunk/octave-forge/extra/java/src/__java__.cc 2008-03-04 11:20:47 UTC (rev 4697) @@ -47,7 +47,6 @@ (JNIEnv *, jclass); static JavaVM *jvm = 0; -static JNIEnv *current_env = 0; static bool jvm_attached = false; // Need to keep hold of the shared library handle until exit. @@ -258,6 +257,8 @@ static void initialize_jvm () { + JNIEnv *current_env; + if (jvm) return; #if defined (__WIN32__) @@ -391,7 +392,6 @@ else jvm->DestroyJavaVM (); jvm = 0; - current_env = 0; jvm_attached = false; if (jvm_lib) @@ -1063,6 +1063,8 @@ static int java_event_hook (void) { + JNIEnv *current_env = octave_java::thread_jni_env (); + if (current_env) { jclass_ref cls (current_env, find_octave_class (current_env, "org/octave/Octave")); @@ -1079,6 +1081,9 @@ try { initialize_jvm (); + + JNIEnv *current_env = octave_java::thread_jni_env (); + octave_java::register_type (); command_editor::add_event_hook (java_event_hook); octave_thread_ID = get_current_thread_ID (current_env); @@ -1131,6 +1136,8 @@ initialize_java (); if (! error_state) { + JNIEnv *current_env = octave_java::thread_jni_env (); + if (args.length () > 0) { std::string name = args(0).string_value (); @@ -1175,6 +1182,8 @@ initialize_java (); if (! error_state) { + JNIEnv *current_env = octave_java::thread_jni_env (); + if (args.length() > 1) { std::string name = args(1).string_value (); @@ -1230,6 +1239,8 @@ initialize_java (); if (! error_state) { + JNIEnv *current_env = octave_java::thread_jni_env (); + if (args.length () == 2) { std::string name = args(1).string_value (); @@ -1281,6 +1292,8 @@ initialize_java (); if (! error_state) { + JNIEnv *current_env = octave_java::thread_jni_env (); + if (args.length () == 3) { std::string name = args(1).string_value (); @@ -1316,6 +1329,8 @@ initialize_java (); if (! error_state) { + JNIEnv *current_env = octave_java::thread_jni_env (); + if (args.length () == 1) { if (args(0).class_name () == "octave_java") @@ -1457,17 +1472,14 @@ dim_vector octave_java::dims(void) const { + JNIEnv *current_env = thread_jni_env (); + if (current_env && java_object) return compute_array_dimensions (current_env, java_object); else return dim_vector (1, 1); } -JNIEnv* octave_java::jni_env (void) -{ - return current_env; -} - JNIEnv* octave_java::thread_jni_env (void) { JNIEnv *env = NULL; @@ -1483,6 +1495,8 @@ octave_value_list retval; int skip = 1; + JNIEnv *current_env = thread_jni_env (); + switch (type[0]) { case '.': @@ -1525,6 +1539,8 @@ { octave_value retval; + JNIEnv *current_env = thread_jni_env (); + switch (type[0]) { case '.': @@ -1602,6 +1618,8 @@ string_vector octave_java::map_keys (void) const { + JNIEnv *current_env = thread_jni_env (); + if (current_env) return get_invoke_list (current_env, to_java ()); else @@ -1610,6 +1628,8 @@ octave_value octave_java::convert_to_str_internal (bool, bool force, char type) const { + JNIEnv *current_env = thread_jni_env (); + if (current_env) return convert_to_string (current_env, to_java (), force, type); else Modified: trunk/octave-forge/extra/java/src/__java__.h =================================================================== --- trunk/octave-forge/extra/java/src/__java__.h 2008-03-03 15:57:50 UTC (rev 4696) +++ trunk/octave-forge/extra/java/src/__java__.h 2008-03-04 11:20:47 UTC (rev 4697) @@ -153,7 +153,7 @@ bool is_string (void) const { - JNIEnv *current_env = jni_env (); + JNIEnv *current_env = thread_jni_env (); if (current_env && java_object) { @@ -163,8 +163,6 @@ return false; } - static JNIEnv* jni_env (void); - static JNIEnv* thread_jni_env (void); octave_value do_java_invoke (JNIEnv* jni_env, const std::string& name, @@ -212,7 +210,7 @@ private: void init (jobject jobj, jclass jcls) { - JNIEnv *current_env = jni_env (); + JNIEnv *current_env = thread_jni_env (); if (current_env) { @@ -238,7 +236,7 @@ void release () { - JNIEnv *current_env = jni_env (); + JNIEnv *current_env = thread_jni_env (); if (current_env) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |