3232#include " qgsmapserviceexception.h"
3333#include " qgspallabeling.h"
3434#include " qgsnetworkaccessmanager.h"
35+ #include " qgsmaplayerregistry.h"
3536
3637#include < QDomDocument>
3738#include < QNetworkDiskCache>
3839#include < QImage>
3940#include < QSettings>
4041#include < QDateTime>
42+ #include < QScopedPointer>
4143
4244// for CMAKE_INSTALL_PREFIX
4345#include " qgsconfig.h"
@@ -280,7 +282,7 @@ int main( int argc, char * argv[] )
280282 QgsCapabilitiesCache capabilitiesCache;
281283
282284 // creating QgsMapRenderer is expensive (access to srs.db), so we do it here before the fcgi loop
283- QgsMapRenderer* theMapRenderer = new QgsMapRenderer ( );
285+ QScopedPointer< QgsMapRenderer > theMapRenderer ( new QgsMapRenderer );
284286 theMapRenderer->setLabelingEngine ( new QgsPalLabeling () );
285287
286288#ifdef QGSMSDEBUG
@@ -291,6 +293,10 @@ int main( int argc, char * argv[] )
291293
292294 while ( fcgi_accept () >= 0 )
293295 {
296+ QgsMapLayerRegistry::instance ()->removeAllMapLayers ();
297+ qgsapp.processEvents ();
298+
299+
294300 if ( !logFile.isEmpty () )
295301 {
296302#ifdef Q_WS_WIN
@@ -303,7 +309,7 @@ int main( int argc, char * argv[] )
303309 printRequestInfos (); // print request infos if in debug mode
304310
305311 // Request handler
306- QgsRequestHandler* theRequestHandler = createRequestHandler ();
312+ QScopedPointer< QgsRequestHandler> theRequestHandler ( createRequestHandler () );
307313 QMap<QString, QString> parameterMap;
308314 try
309315 {
@@ -327,7 +333,6 @@ int main( int argc, char * argv[] )
327333 if ( paramIt == parameterMap.constEnd () )
328334 {
329335 theRequestHandler->sendServiceException ( QgsMapServiceException ( " ServiceNotSpecified" , " Service not specified. The SERVICE parameter is mandatory" ) );
330- delete theRequestHandler;
331336 continue ;
332337 }
333338 else
@@ -342,7 +347,7 @@ int main( int argc, char * argv[] )
342347 {
343348 // error handling
344349 }
345- QgsWCSServer wcsServer ( configFilePath, parameterMap, p, theRequestHandler );
350+ QgsWCSServer wcsServer ( configFilePath, parameterMap, p, theRequestHandler. take () );
346351 wcsServer.executeRequest ();
347352 }
348353 else if ( serviceString == " WFS" )
@@ -352,7 +357,7 @@ int main( int argc, char * argv[] )
352357 {
353358 // error handling
354359 }
355- QgsWFSServer wfsServer ( configFilePath, parameterMap, p, theRequestHandler );
360+ QgsWFSServer wfsServer ( configFilePath, parameterMap, p, theRequestHandler. take () );
356361 wfsServer.executeRequest ();
357362 }
358363 else // WMS else
@@ -363,12 +368,11 @@ int main( int argc, char * argv[] )
363368 // error handling
364369 }
365370 // adminConfigParser->loadLabelSettings( theMapRenderer->labelingEngine() );
366- QgsWMSServer wmsServer ( configFilePath, parameterMap, p, theRequestHandler, theMapRenderer, &capabilitiesCache );
371+ QgsWMSServer wmsServer ( configFilePath, parameterMap, p, theRequestHandler. take () , theMapRenderer. data () , &capabilitiesCache );
367372 wmsServer.executeRequest ();
368373 }
369374 }
370375
371- delete theMapRenderer;
372376 return 0 ;
373377}
374378
0 commit comments