<div dir="ltr"><div><div>Maybe I've found a simple and effective no-API-break solution: I'm working on a QThreadStorage based implementation of the server iface request handler that might be the simplest solution to this issue.<br><br></div>Btw this is only one of the most obvious issues in the server thread safety, there are certainly more areas that need to be checked before we can say that QgsServer class it thread-safe.<br><br></div>Happy sunday :)<br><br><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Nov 19, 2017 at 10:34 AM, Alessandro Pasotti <span dir="ltr"><<a href="mailto:apasotti@gmail.com" target="_blank">apasotti@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>Hi,<br><br></div>mi recent experiments with multi-threaded python wrappers for QGIS server showed a critical flaw in my original implementation of the server plugins.</div><div><br></div><div>First, I want to stress that this is not a problem in FCGI server implementation but only if the server is used directly from python in a multi threaded server implementation.<br></div><div><br></div><div>The problem is that the server interface that exposes the request handler is a static property of the interface, that is changed on every request.</div><div>This means that there is a race condition in setting/accessing the handler from a plugin filter, and that a plugin filter might access to the handler for a wrong request.</div><div><br></div><div>The solution is to pass the request handler (or the request and/or response objects depending on the filter) to the plugin filters and leave the interface for static properties only.</div><div><br></div><div>This would be a big API change for the server interface and filters and I'm not sure we have time/resources to do that now.</div><div><br></div><div>As an alternative we could simply document the issue and change the testing code to create a new server instance to server every request (to be verified, and with consitent performance degradation).<br></div><div><br></div><div>What's your opinion about this issue?</div><div><br></div><div>BTW,  tomorrow I'll file a ticket for this problem.<span class="HOEnZb"><font color="#888888"><br></font></span></div><span class="HOEnZb"><font color="#888888"><div><div><div><div><br>-- <br><div class="m_5551709358157491545gmail_signature">Alessandro Pasotti<br>w3:   <a href="http://www.itopen.it" target="_blank">www.itopen.it</a></div>
</div></div></div></div></font></span></div>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Alessandro Pasotti<br>w3:   <a href="http://www.itopen.it" target="_blank">www.itopen.it</a></div>
</div>