<br><font size=2 face="Courier">Hallo Umberto and Christian</font>
<br>
<br><font size=2 face="Courier">Christian reported a crash in layerObj.delete()
which I</font>
<br><font size=2 face="Courier">also detected. </font>
<br><font size=2 face="Courier">I think I understood the following:</font>
<br>
<br><font size=2 face="Courier">Let's say, we have an initialized &nbsp;mapObj
mO;</font>
<br>
<br><font size=2 face="Courier">layerObj lO = new layerObj(mO);</font>
<br><font size=2 face="Courier">// Say lO is the 5th layer now.</font>
<br><font size=2 face="Courier">// Now lO.swigCMemOwn == true and</font>
<br><font size=2 face="Courier">// &nbsp; &nbsp; lO.swigCPtr points onto
the mO.swigCPtr-&gt;layers[4]</font>
<br>
<br><font size=2 face="Courier">...</font>
<br><font size=2 face="Courier">// now the mapObj is deleted but the Java-layerObj
continues to live.</font>
<br><font size=2 face="Courier">// the C-layer-Object mO.swigCPtr-&gt;layers[4]
will deleted and freed also!</font>
<br><font size=2 face="Courier">mO.delete()</font>
<br><font size=2 face="Courier">// From now on O.swigCPtr points into invalid
piece of C-memory.</font>
<br><font size=2 face="Courier">...</font>
<br>
<br><font size=2 face="Courier">Later on the Java-garbage-collector finalizes
the layerObj. </font>
<br>
<br><font size=2 face="Courier">Because of &quot;lO.swigCMemOwn == true&quot;
and &quot;lO.swigCPtr!=0&quot; the finalize-method calls </font>
<br><font size=2 face="Courier">layerObj.delete(). This method frees lO.swigCPtr
which is invalid memory.</font>
<br>
<br><font size=2 face="Courier">Same story about layerObj/classObj. </font>
<br>
<br><font size=2 face="Courier">Benedikt Rothe</font>
<br>
<br>
<br>
<br><font size=2 face="Courier">UMN MapServer Users List &lt;MAPSERVER-USERS@LISTS.UMN.EDU&gt;
schrieb am 28.06.2005 12:16:01:<br>
<br>
&gt; Hello Umberto,<br>
&gt; <br>
&gt; Umberto Nicoletti wrote:<br>
&gt; <br>
&gt; &gt;Hi Christian,<br>
&gt; &gt;I do not think the error you are getting is due to threading issues,<br>
&gt; &gt;but trying what Mario suggests will at least narrow the search
field.<br>
&gt; &gt;<br>
&gt; &gt;In case you are still getting errors even with synchronized code<br>
&gt; &gt;blocks I have a few questions for you to help me understand your<br>
&gt; &gt;setup:<br>
&gt; &gt;Do you always get errors in delete_classObj or do the segfaults
happen<br>
&gt; &gt;in different functions?<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; Yes, the segfaults alway happen in the delete_classObj function.<br>
&gt; <br>
&gt; &gt;If the segfault is always caused by<br>
&gt; &gt;delete_ClassObj then I suppose you are creating class objects
in your<br>
&gt; &gt;java code. Is that true?<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; Yes, that's true, I need to create classObjects.<br>
&gt; <br>
&gt; &gt;If that is the case then we can setup a very simple test to reproduce<br>
&gt; &gt;the problem: modify one of the examples so that it will load a
map and<br>
&gt; &gt;then start adding classes in similar fashion to your code, but
in a<br>
&gt; &gt;tight loop. Classes should be made eligible for gc by dropping
all<br>
&gt; &gt;references to them. As soon as gc kicks in the vm should crash.
At<br>
&gt; &gt;that point it will be clear that the problem is in delete_ClassObj
and<br>
&gt; &gt;the hunting season will be open.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; I have tested a proposed solution by Benedikt Rothe yet, which said
that<br>
&gt; one should call the delete method of the classObject after it is not<br>
&gt; needed any more.<br>
&gt; This confirms my assumption that this problem occours when java's<br>
&gt; garbage-collector destroys the null-referenced objects. Now it seems
to<br>
&gt; work properly.<br>
&gt; <br>
&gt; The mapserver version we actually use is 4.4.1, we have tested 4.4.2,<br>
&gt; 4.2.4 and 4.6.0, too before.<br>
&gt; <br>
&gt; Thank you all for your help!<br>
&gt; <br>
&gt; Best Regards,<br>
&gt; Christian :-)<br>
&gt; <br>
&gt; <br>
&gt; &gt;BTW can you report the mapserver version you are using (I have
4.4.2<br>
&gt; &gt;and I know it works, so if you can use that).<br>
&gt; &gt;<br>
&gt; &gt;Best Regards,<br>
&gt; &gt;Umberto<br>
&gt; &gt;<br>
&gt; &gt;On 6/21/05, Christian Schroeder &lt;mailings@abiwood99.de&gt;
wrote:<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;&gt;Hello Umberto,<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;thank your for your immediate answer.<br>
&gt; &gt;&gt;I do not call the delete_ methody directly and don't think
I am using<br>
&gt; &gt;&gt;special gc parameters.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;And... I have read the README file before compiling the mapserver
:-)<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;I will try to get it to work with &quot;synchronized&quot;-flags
als Mario Basa<br>
&gt; &gt;&gt;supposed.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;Thank you!<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;Christian<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;Umberto Nicoletti schrieb:<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;&gt;Christian,<br>
&gt; &gt;&gt;&gt;are you calling the delete_ methods directly in your code
or are you<br>
&gt; &gt;&gt;&gt;using some special gc paramaters?<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;As a side note the --use-threads option to configure is
*absolutely*<br>
&gt; &gt;&gt;&gt;necessary, as are brakes on your car. I think we should
write it in<br>
&gt; &gt;&gt;&gt;the README (as if someone actually cared to read it :-(
).<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;Best regards,<br>
&gt; &gt;&gt;&gt;Umberto<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;On 6/21/05, Sean Gillies &lt;sgillies@frii.com&gt; wrote:<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;I'm forwarding this to the users list. Hopefully,
Umberto will be able<br>
&gt; &gt;&gt;&gt;&gt;to provide some insight.<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;cheers,<br>
&gt; &gt;&gt;&gt;&gt;Sean<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;On Jun 16, 2005, at 5:08 PM, Christian Schröder wrote:<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;Dear Mr. Gillies,<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;some weeks ago me and Florian Pepping contacted
you because we had<br>
&gt; &gt;&gt;&gt;&gt;&gt;problems using the Java Mapscript API. Thanks
to you we could solve<br>
&gt; &gt;&gt;&gt;&gt;&gt;these problems :-)<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;Now we got our program doing what it's supposed
to do but there is<br>
&gt; &gt;&gt;&gt;&gt;&gt;still a big problem left which we were not able
to solve yet:<br>
&gt; &gt;&gt;&gt;&gt;&gt;We created a simple servlet which is created inside
a Tomcat 5.0<br>
&gt; &gt;&gt;&gt;&gt;&gt;Webserver. This servlet created a map image (png/jpg)
and displays<br>
&gt; &gt;&gt;&gt;&gt;&gt;some specified objects on the map. (We use it
for location based<br>
&gt; &gt;&gt;&gt;&gt;&gt;services --&gt; &quot;show me the position of
the next printer&quot;).<br>
&gt; &gt;&gt;&gt;&gt;&gt;After an irregular number of calls of our servlet
which uses the Java<br>
&gt; &gt;&gt;&gt;&gt;&gt;Mapscript API the complete Java VM and with it
the Tomcat crashes. I<br>
&gt; &gt;&gt;&gt;&gt;&gt;attached the error report below. The program works
properly for a<br>
&gt; &gt;&gt;&gt;&gt;&gt;number of calls (between 5 and 1000 :-) ) and
after that it crashes.<br>
&gt; &gt;&gt;&gt;&gt;&gt;We have tried several versions of the mapserver
(4.4.1, 4.4.2, 4.2.4,<br>
&gt; &gt;&gt;&gt;&gt;&gt;4.6.1 RC1) and compiled the Java Mapscript Module
with JDK 1.4.2 and<br>
&gt; &gt;&gt;&gt;&gt;&gt;1.5.0. We also configured mapserver using the
--with-threads option,<br>
&gt; &gt;&gt;&gt;&gt;&gt;but all this did not help. By the way the mapserv
cgi-module works<br>
&gt; &gt;&gt;&gt;&gt;&gt;properly.<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;Do you have an idea for this?<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;Thanks for your anxiety<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;Christian &amp; Florian<br>
&gt; &gt;&gt;&gt;&gt;&gt;University of Paderborn, Germany<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;-------------------------------------------------------------------<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;JavaMapscriptLoader: mapscript native library
has been loaded.<br>
&gt; &gt;&gt;&gt;&gt;&gt;* mapscript native library loaded *<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;An unexpected exception has been detected in native
code outside the<br>
&gt; &gt;&gt;&gt;&gt;&gt;VM.<br>
&gt; &gt;&gt;&gt;&gt;&gt;Unexpected Signal : 11 occurred at PC=0x3338268<br>
&gt; &gt;&gt;&gt;&gt;&gt;Function=delete_classObj+0x8<br>
&gt; &gt;&gt;&gt;&gt;&gt;Library=/usr/lib/libmapscript.so<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;Current Java thread:<br>
&gt; &gt;&gt;&gt;&gt;&gt; &nbsp; &nbsp; &nbsp; at edu.umn.gis.mapscript.mapscriptJNI.delete_classObj(Native<br>
&gt; &gt;&gt;&gt;&gt;&gt;Method)<br>
&gt; &gt;&gt;&gt;&gt;&gt; &nbsp; &nbsp; &nbsp; at edu.umn.gis.mapscript.classObj.delete(classObj.java:32)<br>
&gt; &gt;&gt;&gt;&gt;&gt; &nbsp; &nbsp; &nbsp; at edu.umn.gis.mapscript.classObj.finalize(classObj.java:26)<br>
&gt; &gt;&gt;&gt;&gt;&gt; &nbsp; &nbsp; &nbsp; at java.lang.ref.Finalizer.invokeFinalizeMethod(Native
Method)<br>
&gt; &gt;&gt;&gt;&gt;&gt; &nbsp; &nbsp; &nbsp; at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83)<br>
&gt; &gt;&gt;&gt;&gt;&gt; &nbsp; &nbsp; &nbsp; at java.lang.ref.Finalizer.access$100(Finalizer.java:14)<br>
&gt; &gt;&gt;&gt;&gt;&gt; &nbsp; &nbsp; &nbsp; at<br>
&gt; &gt;&gt;&gt;&gt;&gt;java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160)<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;Dynamic libraries:<br>
&gt; &gt;&gt;&gt;&gt;&gt;Can not get information for pid = 10558<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;Heap at VM Abort:<br>
&gt; &gt;&gt;&gt;&gt;&gt;Heap<br>
&gt; &gt;&gt;&gt;&gt;&gt;def new generation &nbsp; total 1152K, used 135K
[0x08ae0000, 0x08c20000,<br>
&gt; &gt;&gt;&gt;&gt;&gt;0x08fc0000)<br>
&gt; &gt;&gt;&gt;&gt;&gt; eden space 1024K, &nbsp; 0% used [0x08ae0000,
0x08ae4078, 0x08be0000)<br>
&gt; &gt;&gt;&gt;&gt;&gt; from space 128K, 100% used [0x08c00000, 0x08c20000,
0x08c20000)<br>
&gt; &gt;&gt;&gt;&gt;&gt; to &nbsp; space 128K, &nbsp; 0% used [0x08be0000,
0x08be0000, 0x08c00000)<br>
&gt; &gt;&gt;&gt;&gt;&gt;tenured generation &nbsp; total 15048K, used 13624K
[0x08fc0000,<br>
&gt; &gt;&gt;&gt;&gt;&gt;0x09e72000,<br>
&gt; &gt;&gt;&gt;&gt;&gt;0x0cae0000)<br>
&gt; &gt;&gt;&gt;&gt;&gt; &nbsp;the space 15048K, &nbsp;90% used [0x08fc0000,
0x09d0e1c0, 0x09d0e200,<br>
&gt; &gt;&gt;&gt;&gt;&gt;0x09e72000)<br>
&gt; &gt;&gt;&gt;&gt;&gt;compacting perm gen &nbsp;total 18432K, used 18373K
[0x0cae0000,<br>
&gt; &gt;&gt;&gt;&gt;&gt;0x0dce0000,<br>
&gt; &gt;&gt;&gt;&gt;&gt;0x10ae0000)<br>
&gt; &gt;&gt;&gt;&gt;&gt; &nbsp;the space 18432K, &nbsp;99% used [0x0cae0000,
0x0dcd1618, 0x0dcd1800,<br>
&gt; &gt;&gt;&gt;&gt;&gt;0x0dce0000)<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;Local Time = Tue Jun 14 15:32:19 2005<br>
&gt; &gt;&gt;&gt;&gt;&gt;Elapsed Time = 246<br>
&gt; &gt;&gt;&gt;&gt;&gt;#<br>
&gt; &gt;&gt;&gt;&gt;&gt;# The exception above was detected in native code
outside the VM<br>
&gt; &gt;&gt;&gt;&gt;&gt;#<br>
&gt; &gt;&gt;&gt;&gt;&gt;# Java VM: Java HotSpot(TM) Client VM (1.4.2_08-b03
mixed mode)<br>
&gt; &gt;&gt;&gt;&gt;&gt;#<br>
&gt; &gt;&gt;&gt;&gt;&gt;# An error report file has been saved as /tmp/hs_err_pid10558.log.<br>
&gt; &gt;&gt;&gt;&gt;&gt;# Please refer to the file for further information.<br>
&gt; &gt;&gt;&gt;&gt;&gt;#<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;-------------------------------------------------------------------<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;On Mar 22, 2005, at 12:02 PM, Florian Pepping
wrote:<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;Dear Mr. Gillies,<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;I'm a student of the University of Paderborn
in Germany and member of<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;the project group &quot;Location Based Services
for Wireless Devices&quot;. In<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;this project we try to position laptops and
other WLAN-enabled<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;devices &nbsp;using the signal strength of
the WLAN. According to their<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;position, we &nbsp;want to offer location
based services to the persons<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;using the devices &nbsp;(where I am; where's
the next printer; is there a<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;friend nearby)<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;In order to do this, we want to use your mapserver
and the Java<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;Mapscript API to generate maps according to
the actual position and<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;situation. We like to customize the map of
our building and add<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;points, lines and so on.<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;We have been able to compile the whole mapserver
and the Java<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;Mapscript API. A small Java example also works,
which presents an<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;unchanged map of our building.<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;[...]<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
</font>