<br><font size=2 face="sans-serif">Dear List</font>
<br>
<br><font size=2 face="sans-serif">I have been writing a program to re-write a shapefile in a spatially sorted order. &nbsp;My test file is about 1.3 GB in size and has over 4 million polygons. &nbsp;My program is based on &quot;sortshp.c&quot; and &quot;shptree.c&quot; . &nbsp;I am using Mapserver-4.6.0 distribution on a Sun system using Solaris 8 and using gcc 3.4.2.</font>
<br>
<br><font size=2 face="sans-serif">The heart of the program is a simple loop, something like</font>
<br>
<br><font size=2 face="sans-serif">for( i=0; i&lt;num_records; i++ ) {</font>
<br><font size=2 face="sans-serif">&nbsp; msSHPReadShape( inSHP, entity[i], shape );</font>
<br><font size=2 face="sans-serif">&nbsp; msSHPWriteShape( outSHP, shape );</font>
<br><font size=2 face="sans-serif">}</font>
<br>
<br><font size=2 face="sans-serif">where shape is of type shapeObj *.</font>
<br>
<br><font size=2 face="sans-serif">As written, this loop causes the program to use about &nbsp;1GB (not MB!) of memory over and above its other demands. &nbsp;If a call to msFreeShape is added, so the loop is changed to </font>
<br>
<br><font size=2 face="sans-serif">for( i=0; i&lt;num_records; i++ ) {</font>
<br><font size=2 face="sans-serif">&nbsp; msSHPReadShape( inSHP, entity[i], shape );</font>
<br><font size=2 face="sans-serif">&nbsp; msSHPWriteShape( outSHP, shape );</font>
<br><font size=2 face="sans-serif">&nbsp; msFreeShape( shape );</font>
<br><font size=2 face="sans-serif">}</font>
<br>
<br><font size=2 face="sans-serif">then the memory usage is only about 50MB (twenty times less). </font>
<br>
<br><font size=2 face="sans-serif">This memory &quot;leak&quot; in the first loop is caused by my initially poor understanding and use of msSHPReadShape, but I think it's a mistake others might easily make. &nbsp;I think this &quot;feature&quot; could be avoided by the following change :</font>
<br>
<br><font size=2 face="sans-serif">*** replace the call to &quot;msInitShape&quot; in &quot;msSHPReadShape&quot; by a call to a &quot;msFreeShape&quot;.</font>
<br>
<br><font size=2 face="sans-serif">I am not sure if &quot;msFreeShape&quot; would need to be modified to deal with an entirely null shape.</font>
<br>
<br><font size=2 face="sans-serif">I have not submitted this as a bug as I am not sure if I am using the mapshape functions correctly.</font>
<br>
<br><font size=2 face="sans-serif">If this change is not made to msSHPReadShape, then I'd advocate adding an &quot;msFreeShape&quot; to &quot;sorthshp.c&quot; right after the two calls</font>
<br><font size=2 face="sans-serif">&quot;msSHPReadShape/msSHPWriteShape&quot;.</font>
<br>
<br><font size=2 face="sans-serif">Regards</font>
<br>
<br><font size=2 face="sans-serif">Richard E. Roger</font>
<br>
<br><font size=2 face="sans-serif">Dr. R. E. Roger &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NSW Department of <br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Primary Industries<br>
Spatial Information Officer Systems &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 161 Kite St<br>
Resource Information Unit &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Locked Bag 21<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ORANGE NSW 2800<br>
ph: (02) 6391 3697 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fax: (02) 6391 3740<br>
<br>
This message is intended for the addressee named and may contain confidential information. If you are not the intended recipient or received it in error, please delete the message and notify sender. Views expressed are those of the individual sender and are not necessarily the views of their organisation.</font>