comparison rdf/PluginRDFIndexer.cpp @ 476:acddcc3cca36

* Avoid deadlock in indexer
author Chris Cannam
date Fri, 07 Nov 2008 20:25:57 +0000
parents a70dcfed59c1
children e0784311a103
comparison
equal deleted inserted replaced
475:a70dcfed59c1 476:acddcc3cca36
159 } 159 }
160 160
161 QString 161 QString
162 PluginRDFIndexer::getIdForPluginURI(QString uri) 162 PluginRDFIndexer::getIdForPluginURI(QString uri)
163 { 163 {
164 QMutexLocker locker(&m_mutex); 164 m_mutex.lock();
165 165
166 if (m_uriToIdMap.find(uri) == m_uriToIdMap.end()) { 166 if (m_uriToIdMap.find(uri) == m_uriToIdMap.end()) {
167
168 m_mutex.unlock();
167 169
168 // Haven't found this uri referenced in any document on the 170 // Haven't found this uri referenced in any document on the
169 // local filesystem; try resolving the pre-fragment part of 171 // local filesystem; try resolving the pre-fragment part of
170 // the uri as a document URL and reading that if possible. 172 // the uri as a document URL and reading that if possible.
171 173
176 178
177 QString baseUrl = QUrl(uri).toString(QUrl::RemoveFragment); 179 QString baseUrl = QUrl(uri).toString(QUrl::RemoveFragment);
178 180
179 indexURL(baseUrl); 181 indexURL(baseUrl);
180 182
183 m_mutex.lock();
184
181 if (m_uriToIdMap.find(uri) == m_uriToIdMap.end()) { 185 if (m_uriToIdMap.find(uri) == m_uriToIdMap.end()) {
182 m_uriToIdMap[uri] = ""; 186 m_uriToIdMap[uri] = "";
183 } 187 }
184 } 188 }
185 189
186 return m_uriToIdMap[uri]; 190 QString id = m_uriToIdMap[uri];
191 m_mutex.unlock();
192 return id;
187 } 193 }
188 194
189 QString 195 QString
190 PluginRDFIndexer::getDescriptionURLForPluginId(QString pluginId) 196 PluginRDFIndexer::getDescriptionURLForPluginId(QString pluginId)
191 { 197 {