<div dir="ltr">I have an issue open on Java mapscript for the same reason and I am waiting for a test case from the user.<div>I can review and test your changes.</div><div><br></div><div>Umberto</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Sep 8, 2014 at 11:46 PM, Lime, Steve D (MNIT) <span dir="ltr"><<a href="mailto:Steve.Lime@state.mn.us" target="_blank">Steve.Lime@state.mn.us</a>></span> wrote:<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>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Really need Thomas to weigh in I think… --Steve<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:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> <a href="mailto:mapserver-dev-bounces@lists.osgeo.org" target="_blank">mapserver-dev-bounces@lists.osgeo.org</a> [mailto:<a href="mailto:mapserver-dev-bounces@lists.osgeo.org" target="_blank">mapserver-dev-bounces@lists.osgeo.org</a>]
<b>On Behalf Of </b>Tamas Szekeres<br>
<b>Sent:</b> Monday, September 08, 2014 2:25 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> Re: [mapserver-dev] Regarding to the issue: segfault on transparent layers with new renderers (#3834)<u></u><u></u></span></p><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Hi Devs,<br>
<br>
Regarding to issue #3834 our problem is caused by maintaining a reference to the renderer vtable in symbolObj and when the renderer is destroyed first, then calling symbolObj->vtable->freeSymbol leads to a crash.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I've already prepared a patch to use outputFormatObj instead of rendererVTableObj which is reference counted and hence it prevents from the renderer vtable to be destroyed until the symbol is alive.<br>
<br>
However it looks more straightforward for me to rely on the already existing renderer_free_func of symbolObj which can contain the pointer to the renderer specific cleanup code. In this regard we can call  symbolObj->renderer_free_func instead of  symbolObj->renderer->freeSymbol
 and it appears to be safe assuming that renderer_free_func can be called even if render->cleanup is called previously.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">We tested this approach and it seems to fix issue #3834. See the changes at:  <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><a href="https://github.com/szekerest/mapserver/commit/6a67c37d9c81569a655f7c21fbd48d6123457601" target="_blank">https://github.com/szekerest/mapserver/commit/6a67c37d9c81569a655f7c21fbd48d6123457601</a><br>
<br>
<br>
Can this fix be applied or anyone can foresee issues with that?<br>
<br>
Best regards,<br>
<br>
Tamas<u></u><u></u></p>
<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>
</div>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">2014-08-24 18:27 GMT+02:00 Tamas Szekeres <<a href="mailto:szekerest@gmail.com" target="_blank">szekerest@gmail.com</a>>:<u></u><u></u></p>
<div>
<p class="MsoNormal">No comments so far.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">I've prepared a fix to show what I've meant by storing the outputformat instead of the renderer vtable in symbolObj.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><a href="https://github.com/szekerest/mapserver/commit/f4a4a2831a3d6228181938c0761fa5caf06c6452" target="_blank">https://github.com/szekerest/mapserver/commit/f4a4a2831a3d6228181938c0761fa5caf06c6452</a><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Let me know if such change can be applied in master.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">This change also contains a fix for the memory leaks caused by the embedded scalebar and legend symbols which is necessary for making the refcount approach to work properly.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">We might also utilize MS_REFCNT macros for the outputformat refcount handling too (which are not yet used), but that would involve further changes to be made in further files.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Best regards,<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>
<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" style="margin-bottom:12.0pt"><u></u> <u></u></p>
<div>
<p class="MsoNormal">2014-08-20 17:42 GMT+02:00 Tamas Szekeres <<a href="mailto:szekerest@gmail.com" target="_blank">szekerest@gmail.com</a>>:<u></u><u></u></p>
<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">Regarding to <a href="https://github.com/mapserver/mapserver/issues/3834" target="_blank">
#3834</a>, I can see several hacks in the code attempting to fix the issue, but it seems we are still running into the same issue by getting a crash in msFreeSymbol at the line:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">s->renderer->freeSymbol(s);<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">We've already been discussing about implementing a symbol cache at the renderers (and eliminate the need of maintaining back references to the renderer at symbolObj), however that seems to require fair amount of coding and testing at the
 first sight.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">What if we change the renderer reference in symbolObj from rendererVTableObj to outputFormatObj (which contains the vtable)? Since the outputformat is reference counted we could make sure the outputformat (and the vtable) exists until the
 corresponding symbolObj is alive?<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">Best regards,<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>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div></div></div>
</div>

<br>_______________________________________________<br>
mapserver-dev mailing list<br>
<a href="mailto:mapserver-dev@lists.osgeo.org">mapserver-dev@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/mapserver-dev" target="_blank">http://lists.osgeo.org/mailman/listinfo/mapserver-dev</a><br></blockquote></div><br></div>