diff --git a/src/mapserver/qgshostedrdsbuilder.cpp b/src/mapserver/qgshostedrdsbuilder.cpp index 96bff620a0fa..ff3072b3f142 100644 --- a/src/mapserver/qgshostedrdsbuilder.cpp +++ b/src/mapserver/qgshostedrdsbuilder.cpp @@ -67,7 +67,7 @@ QgsMapLayer* QgsHostedRDSBuilder::createMapLayer( const QDomElement& elem, rl = new QgsRasterLayer( uri, layerNameFromUri( uri ) ); if ( allowCaching ) { - QgsMSLayerCache::instance()->insertLayer( uri, layerName, rl, "" /*todo: add project file path*/ ); + QgsMSLayerCache::instance()->insertLayer( uri, layerName, rl ); } else { diff --git a/src/mapserver/qgshostedvdsbuilder.cpp b/src/mapserver/qgshostedvdsbuilder.cpp index a3837be19b6d..07ca7b6fc6da 100644 --- a/src/mapserver/qgshostedvdsbuilder.cpp +++ b/src/mapserver/qgshostedvdsbuilder.cpp @@ -75,7 +75,7 @@ QgsMapLayer* QgsHostedVDSBuilder::createMapLayer( const QDomElement& elem, if ( allowCaching ) { - QgsMSLayerCache::instance()->insertLayer( uri, layerName, ml, "" /*todo: add project file path*/ ); + QgsMSLayerCache::instance()->insertLayer( uri, layerName, ml ); } else { diff --git a/src/mapserver/qgsmslayercache.cpp b/src/mapserver/qgsmslayercache.cpp index 038567c44cac..2ff2317b4aee 100644 --- a/src/mapserver/qgsmslayercache.cpp +++ b/src/mapserver/qgsmslayercache.cpp @@ -75,15 +75,18 @@ void QgsMSLayerCache::insertLayer( const QString& url, const QString& layerName, mEntries.insert( urlLayerPair, newEntry ); //update config file map - QHash< QString, int >::iterator configIt = mConfigFiles.find( configFile ); - if ( configIt == mConfigFiles.end() ) + if ( !configFile.isEmpty() ) { - mConfigFiles.insert( configFile, 1 ); - mFileSystemWatcher.addPath( configFile ); - } - else - { - mConfigFiles[configFile] = configIt.value() + 1; //increment reference counter + QHash< QString, int >::iterator configIt = mConfigFiles.find( configFile ); + if ( configIt == mConfigFiles.end() ) + { + mConfigFiles.insert( configFile, 1 ); + mFileSystemWatcher.addPath( configFile ); + } + else + { + mConfigFiles[configFile] = configIt.value() + 1; //increment reference counter + } } } @@ -190,14 +193,17 @@ void QgsMSLayerCache::freeEntryRessources( QgsMSLayerCacheEntry& entry ) } //counter - int configFileCount = mConfigFiles[entry.configFile]; - if ( configFileCount < 2 ) + if ( !entry.configFile.isEmpty() ) { - mConfigFiles.remove( entry.configFile ); - mFileSystemWatcher.removePath( entry.configFile ); - } - else - { - mConfigFiles[entry.configFile] = configFileCount - 1; + int configFileCount = mConfigFiles[entry.configFile]; + if ( configFileCount < 2 ) + { + mConfigFiles.remove( entry.configFile ); + mFileSystemWatcher.removePath( entry.configFile ); + } + else + { + mConfigFiles[entry.configFile] = configFileCount - 1; + } } } diff --git a/src/mapserver/qgsmslayercache.h b/src/mapserver/qgsmslayercache.h index b45166647f86..d74a1b3dab6e 100644 --- a/src/mapserver/qgsmslayercache.h +++ b/src/mapserver/qgsmslayercache.h @@ -48,8 +48,9 @@ class QgsMSLayerCache: public QObject /**Inserts a new layer into the cash @param url the layer datasource @param layerName the layer name (to distinguish between different layers in a request using the same datasource + @param configFile path of the config file (to invalidate entries if file changes). Can be empty (e.g. layers from sld) @param tempFiles some layers have temporary files. The cash makes sure they are removed when removing the layer from the cash*/ - void insertLayer( const QString& url, const QString& layerName, QgsMapLayer* layer, const QString& configFile, const QList& tempFiles = QList() ); + void insertLayer( const QString& url, const QString& layerName, QgsMapLayer* layer, const QString& configFile = QString(), const QList& tempFiles = QList() ); /**Searches for the layer with the given url. @return a pointer to the layer or 0 if no such layer*/ QgsMapLayer* searchLayer( const QString& url, const QString& layerName ); diff --git a/src/mapserver/qgsremoteowsbuilder.cpp b/src/mapserver/qgsremoteowsbuilder.cpp index ee7ebccb8a5e..bd93ff580bfd 100644 --- a/src/mapserver/qgsremoteowsbuilder.cpp +++ b/src/mapserver/qgsremoteowsbuilder.cpp @@ -115,7 +115,7 @@ QgsMapLayer* QgsRemoteOWSBuilder::createMapLayer( { if ( allowCaching ) { - QgsMSLayerCache::instance()->insertLayer( url, layerName, result, "" /*todo: add project file path*/ ); + QgsMSLayerCache::instance()->insertLayer( url, layerName, result ); } else { @@ -215,7 +215,7 @@ QgsRasterLayer* QgsRemoteOWSBuilder::wmsLayerFromUrl( const QString& url, const //insert into cache if ( allowCaching ) { - QgsMSLayerCache::instance()->insertLayer( url, layerName, result, "" /*todo: add project file path*/ ); + QgsMSLayerCache::instance()->insertLayer( url, layerName, result ); } else { @@ -414,7 +414,7 @@ QgsVectorLayer* QgsRemoteOWSBuilder::sosLayer( const QDomElement& remoteOWSElem, { if ( allowCaching ) { - QgsMSLayerCache::instance()->insertLayer( providerUrl, layerName, sosLayer, "" /*todo: add project file path*/ ); + QgsMSLayerCache::instance()->insertLayer( providerUrl, layerName, sosLayer ); } else {