From: Thomas D. <to...@gm...> - 2006-08-03 04:16:46
|
On 8/1/06, William S Fulton <ws...@fu...> wrote: > I havn't much time to look at this, but it would be worth looking at > SWIG_DIRECTOR_OWNED in java.swg and the swigTakeOwnership() and > swigReleaseOwnership() methods in the director proxy class and let us > know how you get on as I don't think any of this was documented. >From what I can see, it has nothing to do with ownership (the C++ listener object is owned by Java as it should be), but rather with the fact, that callin methods of the C++ listener in a different C++ thread results in two different jenv's being used. So it might be that one of the two jenvs is not properly released or something ? You can have a look yourself on what is going on via the log below. Basically, I added log statements at the beginning and end of every method in the swig generated C++/C code. The log below is the output generated by running the Java test program that I attached to the last mail. Tom ----------------- [Java_swigtest_swigtestJNI_swig_1module_1init] Entering: jenv=3D003E627C, jcls=3D0013F464 [Java_swigtest_swigtestJNI_swig_1module_1init] Exiting [Java_swigtest_swigtestJNI_new_1Listener] Entering: jenv=3D003E627C, jcls= =3D0013F800 [JObjectWrapper::JObjectWrapper] Creating new wrapper object: 0092888C [Director::Director] Entering: this=3D00928884, jenv=3D003E627C [Director::Director] Exiting: this=3D00928884 [SwigDirector_Listener::SwigDirector_Listener] Creating director object: 00928880 [Java_swigtest_swigtestJNI_new_1Listener] Exiting: jresult=3D9603200 [Java_swigtest_swigtestJNI_Listener_1director_1connect] Entering: jenv=3D003E627C, jcls=3D0013F7F0, jself=3D0013F808, objarg=3D9603200, jswig_mem_own=3D=01, jweak_global=3D=01 [SwigDirector_Listener::swig_connect_director] Entering: this=3D00928880, jenv=3D003E627C, jself=3D0013F808, jcls=3D00B28D78, swig_mem_own=3D1, weak_global=3D1 [Director::swig_set_self] Entering: this=3D00928884, jenv=3D003E627C, jself=3D0013F808, mem_own=3D1, weak_global=3D1 [JObjectWrapper::set] Entering: this=3D0092888C, jenv=3D003E627C, jobj=3D0013F808, mem_own=3D1, weak_global=3D1 JObjectWrapper::set(0013F808, weak_global) -> 00B0EC68 [JObjectWrapper::JObjectWrapper] Exiting this=3D0092888C, return=3Dtrue [Director::swig_set_self] Exiting: this=3D00928884, return=3D1 [SwigDirector_Listener::swig_connect_director] Exiting: this=3D00928880 [Java_swigtest_swigtestJNI_Listener_1director_1connect] Exiting [Java_swigtest_swigtestJNI_new_1Test] Entering: jenv=3D003E627C, jcls=3D001= 3F828 [Java_swigtest_swigtestJNI_new_1Test] Exiting: jresult=3D9603288 [Java_swigtest_swigtestJNI_Test_1addListener] Entering: jenv=3D003E627C, jcls=3D0013F828, jarg1=3D9603288, jarg2=3D9603200 [Java_swigtest_swigtestJNI_Test_1addListener] Exiting [Java_swigtest_swigtestJNI_Test_1start] Entering: jenv=3D003E627C, jcls=3D0013F838, jarg1=3D9603288 [SwigDirector_Listener::callback] Entering: this=3D00928880 [Director::swig_acquire_jenv] Entering: this=3D00928884 [Director::swig_acquire_jenv] Exiting: this=3D00928884, env=3D00B36174 [Director::swig_get_self] Entering: this=3D00928884, jenv=3D00B36174 [JObjectWrapper::get] Entering: this=3D0092888C, jenv=3D00B36174 JObjectWrapper::get(00B0EC68) -> return new local ref [JObjectWrapper::get] Exiting: this=3D0092888C, return=3D00B36458 [Director::swig_get_self] Exiting: this=3D00928884, return=3D00B36458 [SwigDirector_Listener::callback] Exiting: this=3D00928880 [SwigDirector_Listener::callback] Entering: this=3D00928880 [Director::swig_acquire_jenv] Entering: this=3D00928884 [Director::swig_acquire_jenv] Exiting: this=3D00928884, env=3D00B36174 [Director::swig_get_self] Entering: this=3D00928884, jenv=3D00B36174 [JObjectWrapper::get] Entering: this=3D0092888C, jenv=3D00B36174 JObjectWrapper::get(00B0EC68) -> return new local ref [JObjectWrapper::get] Exiting: this=3D0092888C, return=3D00B36460 [Director::swig_get_self] Exiting: this=3D00928884, return=3D00B36460 [SwigDirector_Listener::callback] Exiting: this=3D00928880 [SwigDirector_Listener::callback] Entering: this=3D00928880 [Director::swig_acquire_jenv] Entering: this=3D00928884 [Director::swig_acquire_jenv] Exiting: this=3D00928884, env=3D00B36174 [Director::swig_get_self] Entering: this=3D00928884, jenv=3D00B36174 [JObjectWrapper::get] Entering: this=3D0092888C, jenv=3D00B36174 JObjectWrapper::get(00B0EC68) -> return new local ref [JObjectWrapper::get] Exiting: this=3D0092888C, return=3D00B36468 [Director::swig_get_self] Exiting: this=3D00928884, return=3D00B36468 [SwigDirector_Listener::callback] Exiting: this=3D00928880 [SwigDirector_Listener::callback] Entering: this=3D00928880 [Director::swig_acquire_jenv] Entering: this=3D00928884 [Director::swig_acquire_jenv] Exiting: this=3D00928884, env=3D00B36174 [Director::swig_get_self] Entering: this=3D00928884, jenv=3D00B36174 [JObjectWrapper::get] Entering: this=3D0092888C, jenv=3D00B36174 JObjectWrapper::get(00B0EC68) -> return new local ref [JObjectWrapper::get] Exiting: this=3D0092888C, return=3D00B36470 [Director::swig_get_self] Exiting: this=3D00928884, return=3D00B36470 [SwigDirector_Listener::callback] Exiting: this=3D00928880 [SwigDirector_Listener::callback] Entering: this=3D00928880 [Director::swig_acquire_jenv] Entering: this=3D00928884 [Director::swig_acquire_jenv] Exiting: this=3D00928884, env=3D00B36174 [Director::swig_get_self] Entering: this=3D00928884, jenv=3D00B36174 [JObjectWrapper::get] Entering: this=3D0092888C, jenv=3D00B36174 JObjectWrapper::get(00B0EC68) -> return new local ref [JObjectWrapper::get] Exiting: this=3D0092888C, return=3D00B36478 [Director::swig_get_self] Exiting: this=3D00928884, return=3D00B36478 [SwigDirector_Listener::callback] Exiting: this=3D00928880 [SwigDirector_Listener::callback] Entering: this=3D00928880 [Director::swig_acquire_jenv] Entering: this=3D00928884 [Director::swig_acquire_jenv] Exiting: this=3D00928884, env=3D00B36174 [Director::swig_get_self] Entering: this=3D00928884, jenv=3D00B36174 [JObjectWrapper::get] Entering: this=3D0092888C, jenv=3D00B36174 JObjectWrapper::get(00B0EC68) -> return new local ref [JObjectWrapper::get] Exiting: this=3D0092888C, return=3D00B36480 [Director::swig_get_self] Exiting: this=3D00928884, return=3D00B36480 [SwigDirector_Listener::callback] Exiting: this=3D00928880 [SwigDirector_Listener::callback] Entering: this=3D00928880 [Director::swig_acquire_jenv] Entering: this=3D00928884 [Director::swig_acquire_jenv] Exiting: this=3D00928884, env=3D00B36174 [Director::swig_get_self] Entering: this=3D00928884, jenv=3D00B36174 [JObjectWrapper::get] Entering: this=3D0092888C, jenv=3D00B36174 JObjectWrapper::get(00B0EC68) -> return new local ref [JObjectWrapper::get] Exiting: this=3D0092888C, return=3D00B36488 [Director::swig_get_self] Exiting: this=3D00928884, return=3D00B36488 [SwigDirector_Listener::callback] Exiting: this=3D00928880 [SwigDirector_Listener::callback] Entering: this=3D00928880 [Director::swig_acquire_jenv] Entering: this=3D00928884 [Director::swig_acquire_jenv] Exiting: this=3D00928884, env=3D00B36174 [Director::swig_get_self] Entering: this=3D00928884, jenv=3D00B36174 [JObjectWrapper::get] Entering: this=3D0092888C, jenv=3D00B36174 JObjectWrapper::get(00B0EC68) -> return new local ref [JObjectWrapper::get] Exiting: this=3D0092888C, return=3D00B36490 [Director::swig_get_self] Exiting: this=3D00928884, return=3D00B36490 [SwigDirector_Listener::callback] Exiting: this=3D00928880 [SwigDirector_Listener::callback] Entering: this=3D00928880 [Director::swig_acquire_jenv] Entering: this=3D00928884 [Director::swig_acquire_jenv] Exiting: this=3D00928884, env=3D00B36174 [Director::swig_get_self] Entering: this=3D00928884, jenv=3D00B36174 [JObjectWrapper::get] Entering: this=3D0092888C, jenv=3D00B36174 JObjectWrapper::get(00B0EC68) -> return new local ref [JObjectWrapper::get] Exiting: this=3D0092888C, return=3D00B36498 [Director::swig_get_self] Exiting: this=3D00928884, return=3D00B36498 [SwigDirector_Listener::callback] Exiting: this=3D00928880 [SwigDirector_Listener::callback] Entering: this=3D00928880 [Director::swig_acquire_jenv] Entering: this=3D00928884 [Director::swig_acquire_jenv] Exiting: this=3D00928884, env=3D00B36174 [Director::swig_get_self] Entering: this=3D00928884, jenv=3D00B36174 [JObjectWrapper::get] Entering: this=3D0092888C, jenv=3D00B36174 JObjectWrapper::get(00B0EC68) -> return new local ref [JObjectWrapper::get] Exiting: this=3D0092888C, return=3D00B364A0 [Director::swig_get_self] Exiting: this=3D00928884, return=3D00B364A0 [SwigDirector_Listener::callback] Exiting: this=3D00928880 [SwigDirector_Listener::callback] Entering: this=3D00928880 [Director::swig_acquire_jenv] Entering: this=3D00928884 [Director::swig_acquire_jenv] Exiting: this=3D00928884, env=3D003E627C [Director::swig_get_self] Entering: this=3D00928884, jenv=3D003E627C [JObjectWrapper::get] Entering: this=3D0092888C, jenv=3D003E627C JObjectWrapper::get(00B0EC68) -> return new local ref [JObjectWrapper::get] Exiting: this=3D0092888C, return=3D00B28D78 [Director::swig_get_self] Exiting: this=3D00928884, return=3D00B28D78 [SwigDirector_Listener::callback] Exiting: this=3D00928880 [Java_swigtest_swigtestJNI_Test_1start] Exiting [Java_swigtest_swigtestJNI_Test_1removeListener] Entering: jenv=3D003E627C, jcls=3D0013F828, jarg1=3D9603288, jarg2=3D9603200 [Java_swigtest_swigtestJNI_Test_1removeListener] Exiting |