<div dir="ltr">Getting back to this problem, I might think this is a bug in loadLayer, where the projection object should be reset before loading the new one. updateFromString should always work on already initialized parameters either of string type or the more complex types. In this regard loadProjection (and loadExpression) should work like getString to clean up the existing object to avoid memory leaks.<div><br></div><div>So what about changing loadProjection this way? </div><div><br></div><div><div>@@ -1355,9 +1355,8 @@ static int loadProjection(projectionObj *p)</div><div> #ifdef USE_PROJ</div><div> </div><div>   if ( p->proj != NULL ) {</div><div>-    msSetError(MS_MISCERR, "Projection is already initialized. Multiple projection definitions are not allowed in this object. (line %d)",</div><div>-               "loadProjection()", msyylineno);</div><div>-    return(-1);</div><div>+    msFreeProjection(p);</div><div>+    msInitProjection(p);</div><div>   }</div></div><div><br></div><div>Thanks,</div><div><br></div><div>Tamas</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-10-10 21:26 GMT+02:00 Lime, Steve D (MNIT) <span dir="ltr"><<a href="mailto:steve.lime@state.mn.us" target="_blank">steve.lime@state.mn.us</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div class="m_-3569310078371364077WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Not sure, seems easy enough to test. I’ll try and take a look at the Swig files and report back. If you’re going to reset and replace all existing classes, styles,
 labels, etc… you’d want the reference counts to be affected wouldn’t you?<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Tamas Szekeres [mailto:<a href="mailto:szekerest@gmail.com" target="_blank">szekerest@gmail.com</a>]
<br>
<b>Sent:</b> Tuesday, October 10, 2017 1:48 PM</span></p><div><div class="h5"><br>
<b>To:</b> Lime, Steve D (MNIT) <<a href="mailto:steve.lime@state.mn.us" target="_blank">steve.lime@state.mn.us</a>><br>
<b>Cc:</b> <a href="mailto:mapserver-dev@lists.osgeo.org" target="_blank">mapserver-dev@lists.osgeo.org</a><br>
<b>Subject:</b> Re: [mapserver-dev] Using updateFromString on existing items<u></u><u></u></div></div><p></p><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Adding a separate function is fine for me. Would that be easy to implement? I've been thinking that freeLayer would do the trick, but that is bound to a reference counting approach, which prevents from calling this method in my use case.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Tamas<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">2017-10-10 20:36 GMT+02:00 Lime, Steve D (MNIT) <<a href="mailto:steve.lime@state.mn.us" target="_blank">steve.lime@state.mn.us</a>>:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">I was thinking more about this and I think there are several possibilities if you want to completely
 repopulate a layer (or other object) from a string. Personally, I’d leave the updateFromString() method alone and add a reset/init or whatever method that basically free’s the object and then re-initializes it resulting in an object that is ready to load a
 definition into. For a layer that would clear out projections, classes, etc…, for a class that would clear out styles, and so on… Code would look something like:</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">  $layer = $map->getLayerByName(‘foo’);</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">  $layer->reset();</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">  $layer->updateFromString($<wbr>fullLayerDefinitionString);</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">One could also add new method to explicitly do the reset and update (e.g. resetFromString) or perhaps
 add a flag to the updateFromString method to reset.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Steve</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> mapserver-dev [mailto:<a href="mailto:mapserver-dev-bounces@lists.osgeo.org" target="_blank">mapserver-dev-bounces@<wbr>lists.osgeo.org</a>]
<b>On Behalf Of </b>Lime, Steve D (MNIT)<br>
<b>Sent:</b> Monday, October 09, 2017 11:12 AM<br>
<b>To:</b> Tamas Szekeres <<a href="mailto:szekerest@gmail.com" target="_blank">szekerest@gmail.com</a>></span><u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><br>
<b>Cc:</b> <a href="mailto:mapserver-dev@lists.osgeo.org" target="_blank">mapserver-dev@lists.osgeo.org</a><br>
<b>Subject:</b> Re: [mapserver-dev] Using updateFromString on existing items<u></u><u></u></p>
</div>
</div>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">I think we need to spend a little time looking at the code and the original RFC to properly document
 the “as is” behavior and then determine if any changes are necessary. Looking at the layer code I think my reference to “minor edits” is wrong. If you update a layer from a string in MapScript and that string contains classes then *<b>new</b>* classes are
 added to the layer object. If you want to update an existing class you’d have to update it directly from a string, not via the parent layer. Resetting the object would be a pretty drastic change. It may be that only projections need some sort of intervention
 to clear things out…</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Steve</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Tamas Szekeres [<a href="mailto:szekerest@gmail.com" target="_blank">mailto:szekerest@gmail.com</a>]
<br>
<b>Sent:</b> Monday, October 09, 2017 10:18 AM<br>
<b>To:</b> Lime, Steve D (MNIT) <<a href="mailto:steve.lime@state.mn.us" target="_blank">steve.lime@state.mn.us</a>><br>
<b>Cc:</b> <a href="mailto:mapserver-dev@lists.osgeo.org" target="_blank">mapserver-dev@lists.osgeo.org</a><br>
<b>Subject:</b> Re: [mapserver-dev] Using updateFromString on existing items</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">Hi Steve,<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">It is hard to interpret what are the allowed "minor edits" in such case. Neither the documentation or the corresponting rfc provides any guidance.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">One can think a reasonable use case to completely deserialize the object state by using these methods.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Do we have a simple approach to reset the state of the object (as it was newly created) before calling the updateFromString method?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Tamas<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">2017-10-09 16:23 GMT+02:00 Lime, Steve D (MNIT) <<a href="mailto:steve.lime@state.mn.us" target="_blank">steve.lime@state.mn.us</a>>:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div id="m_-3569310078371364077m_-1994398152975428633m_7818826755240813050divtagdefaultwrapper">
<p style="margin-bottom:12.0pt"><span style="font-family:"Calibri",sans-serif;color:black">The original use case was to facilitate minor edits to existing object properties but not sub-objects. For example, you can't replace all the classes in a layer through
 a string update to the layer itself. We certainly could make all that work cleaner if there were demand.</span><u></u><u></u></p>
<p><span style="font-family:"Calibri",sans-serif;color:black">At least you get a proper error message... ;-)</span><u></u><u></u></p>
<p><span style="font-family:"Calibri",sans-serif;color:black"> </span><u></u><u></u></p>
<p><span style="font-family:"Calibri",sans-serif;color:black">Steve</span><u></u><u></u></p>
</div>
<div class="MsoNormal" align="center" style="text-align:center">
<hr size="2" width="98%" align="center">
</div>
<div id="m_-3569310078371364077m_-1994398152975428633m_7818826755240813050divRplyFwdMsg">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:black">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:black"> mapserver-dev
 <<a href="mailto:mapserver-dev-bounces@lists.osgeo.org" target="_blank">mapserver-dev-bounces@lists.<wbr>osgeo.org</a>> on behalf of Tamas Szekeres <<a href="mailto:szekerest@gmail.com" target="_blank">szekerest@gmail.com</a>><br>
<b>Sent:</b> Sunday, October 8, 2017 12:49:55 PM<br>
<b>To:</b> <a href="mailto:mapserver-dev@lists.osgeo.org" target="_blank">mapserver-dev@lists.osgeo.org</a><br>
<b>Subject:</b> [mapserver-dev] Using updateFromString on existing items</span> <u></u>
<u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<div>
<div>
<p class="MsoNormal">Hi Devs,
<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Is that a supported use case to apply updateFromString on an existing item or it should only be used only on a newly created item?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">For example when I use layerObj.updateFromString on an existing layer I get the following error<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;color:black">loadProjection(): General error message. Projection is already initialized. Multiple projection definitions are not
 allowed in this object. (line 10)</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">This is because we don't have a proper cleanup code on the existing layer before calling loadLayer on it. The same applies to the other object types.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<p class="MsoNormal">Thanks,<br>
<br>
Tamas<u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div></div></div>
</div>

</blockquote></div><br></div>