60
60
QgsWMSServer::QgsWMSServer ( const QString& configFilePath, QMap<QString, QString> parameters, QgsWMSConfigParser* cp,
61
61
QgsRequestHandler* rh, QgsMapRenderer* renderer, QgsCapabilitiesCache* capCache )
62
62
: QgsOWSServer( configFilePath, parameters, rh )
63
- , mMapRenderer( renderer ), mCapabilitiesCache( capCache ), mConfigParser( cp )
63
+ , mMapRenderer( renderer ), mCapabilitiesCache( capCache ), mConfigParser( cp ), mOwnsConfigParser( false )
64
64
{
65
65
}
66
66
@@ -72,6 +72,16 @@ QgsWMSServer::QgsWMSServer(): QgsOWSServer( QString(), QMap<QString, QString>(),
72
72
{
73
73
}
74
74
75
+ void QgsWMSServer::cleanupAfterRequest ()
76
+ {
77
+ if ( mOwnsConfigParser )
78
+ {
79
+ delete mConfigParser ;
80
+ mConfigParser = 0 ;
81
+ mOwnsConfigParser = false ;
82
+ }
83
+ }
84
+
75
85
void QgsWMSServer::executeRequest ()
76
86
{
77
87
if ( !mMapRenderer || !mConfigParser || !mRequestHandler || !mCapabilitiesCache )
@@ -85,7 +95,6 @@ void QgsWMSServer::executeRequest()
85
95
{
86
96
QgsDebugMsg ( " unable to find 'REQUEST' parameter, exiting..." );
87
97
mRequestHandler ->sendServiceException ( QgsMapServiceException ( " OperationNotSupported" , " Please check the value of the REQUEST parameter" ) );
88
- return ;
89
98
}
90
99
91
100
// version
@@ -111,6 +120,7 @@ void QgsWMSServer::executeRequest()
111
120
catch ( QgsMapServiceException& ex )
112
121
{
113
122
mRequestHandler ->sendServiceException ( ex );
123
+ cleanupAfterRequest ();
114
124
return ;
115
125
}
116
126
mCapabilitiesCache ->insertCapabilitiesDocument ( mConfigFilePath , getProjectSettings ? " projectSettings" : version, &doc );
@@ -125,7 +135,6 @@ void QgsWMSServer::executeRequest()
125
135
{
126
136
mRequestHandler ->sendGetCapabilitiesResponse ( *capabilitiesDocument );
127
137
}
128
- return ;
129
138
}
130
139
// GetMap
131
140
else if ( request.compare ( " GetMap" , Qt::CaseInsensitive ) == 0 )
@@ -139,6 +148,7 @@ void QgsWMSServer::executeRequest()
139
148
{
140
149
QgsDebugMsg ( " Caught exception during GetMap request" );
141
150
mRequestHandler ->sendServiceException ( ex );
151
+ cleanupAfterRequest ();
142
152
return ;
143
153
}
144
154
@@ -154,7 +164,6 @@ void QgsWMSServer::executeRequest()
154
164
QgsDebugMsg ( " result image is 0" );
155
165
}
156
166
delete result;
157
- return ;
158
167
}
159
168
// GetFeatureInfo
160
169
else if ( request.compare ( " GetFeatureInfo" , Qt::CaseInsensitive ) == 0 )
@@ -164,18 +173,19 @@ void QgsWMSServer::executeRequest()
164
173
{
165
174
if ( getFeatureInfo ( featureInfoDoc, version ) != 0 )
166
175
{
176
+ cleanupAfterRequest ();
167
177
return ;
168
178
}
169
179
}
170
180
catch ( QgsMapServiceException& ex )
171
181
{
172
182
mRequestHandler ->sendServiceException ( ex );
183
+ cleanupAfterRequest ();
173
184
return ;
174
185
}
175
186
176
187
QString infoFormat = mParameters .value ( " INFO_FORMAT" );
177
188
mRequestHandler ->sendGetFeatureInfoResponse ( featureInfoDoc, infoFormat );
178
- return ;
179
189
}
180
190
// GetContext
181
191
else if ( request.compare ( " GetContext" , Qt::CaseInsensitive ) == 0 )
@@ -189,7 +199,6 @@ void QgsWMSServer::executeRequest()
189
199
{
190
200
mRequestHandler ->sendServiceException ( ex );
191
201
}
192
- return ;
193
202
}
194
203
// GetStyle for compatibility with earlier QGIS versions
195
204
else if ( request.compare ( " GetStyle" , Qt::CaseInsensitive ) == 0 )
@@ -203,7 +212,6 @@ void QgsWMSServer::executeRequest()
203
212
{
204
213
mRequestHandler ->sendServiceException ( ex );
205
214
}
206
- return ;
207
215
}
208
216
// GetStyles
209
217
else if ( request.compare ( " GetStyles" , Qt::CaseInsensitive ) == 0 )
@@ -225,7 +233,6 @@ void QgsWMSServer::executeRequest()
225
233
mRequestHandler ->sendServiceException ( ex );
226
234
}
227
235
}
228
- return ;
229
236
}
230
237
// GetLegendGraphic
231
238
else if ( request.compare ( " GetLegendGraphic" , Qt::CaseInsensitive ) == 0 ||
@@ -255,7 +262,6 @@ void QgsWMSServer::executeRequest()
255
262
// do some error handling
256
263
QgsDebugMsg ( " result image is 0" );
257
264
}
258
- return ;
259
265
}
260
266
// GetPrint
261
267
else if ( request.compare ( " GetPrint" , Qt::CaseInsensitive ) == 0 )
@@ -275,14 +281,13 @@ void QgsWMSServer::executeRequest()
275
281
mRequestHandler ->sendGetPrintResponse ( printOutput );
276
282
}
277
283
delete printOutput;
278
- return ;
279
284
}
280
285
else // unknown request
281
286
{
282
287
QgsMapServiceException e ( " OperationNotSupported" , " Operation " + request + " not supported" );
283
288
mRequestHandler ->sendServiceException ( e );
284
- return ;
285
289
}
290
+ cleanupAfterRequest ();
286
291
}
287
292
288
293
void QgsWMSServer::appendFormats ( QDomDocument &doc, QDomElement &elem, const QStringList &formats )
@@ -1568,6 +1573,7 @@ int QgsWMSServer::initializeSLDParser( QStringList& layersList, QStringList& sty
1568
1573
QgsSLDConfigParser* userSLDParser = new QgsSLDConfigParser ( theDocument, mParameters );
1569
1574
userSLDParser->setFallbackParser ( mConfigParser );
1570
1575
mConfigParser = userSLDParser;
1576
+ mOwnsConfigParser = true ;
1571
1577
// now replace the content of layersList and stylesList (if present)
1572
1578
layersList.clear ();
1573
1579
stylesList.clear ();
0 commit comments