Changeset 225662 in webkit
- Timestamp:
- Dec 7, 2017 5:31:10 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r225661 r225662 1 2017-12-07 Yusuke Suzuki <utatane.tea@gmail.com> 2 3 Use StaticLock instead of NeverDestroyed<Lock> 4 https://bugs.webkit.org/show_bug.cgi?id=180507 5 6 Reviewed by Saam Barati. 7 8 StaticLock can be used instead of using NeverDestroyed<Lock>. 9 10 No behavior change. 11 12 * Modules/webdatabase/Database.cpp: 13 (WebCore::Database::performOpenAndVerify): 14 * Modules/webdatabase/DatabaseTracker.cpp: 15 (WebCore::DatabaseTracker::openDatabaseMutex): 16 (WebCore::DatabaseTracker::emptyDatabaseFilesRemovalTaskWillBeScheduled): 17 (WebCore::DatabaseTracker::emptyDatabaseFilesRemovalTaskDidFinish): 18 (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged): 19 (WebCore::DatabaseTracker::scheduleForNotification): 20 (WebCore::DatabaseTracker::notifyDatabasesChanged): 21 (WebCore::notificationMutex): Deleted. 22 * Modules/webdatabase/DatabaseTracker.h: 23 * platform/URL.cpp: 24 (WebCore::registerDefaultPortForProtocolForTesting): 25 (WebCore::clearDefaultPortForProtocolMapForTesting): 26 (WebCore::defaultPortForProtocol): 27 (WebCore::defaultPortForProtocolMapForTestingLock): Deleted. 28 * platform/graphics/MediaPlayer.cpp: 29 (WebCore::buildMediaEnginesVector): 30 (WebCore::installedMediaEngines): 31 (WebCore::MediaPlayer::resetMediaEngines): 32 (WebCore::mediaEngineVectorLock): Deleted. 33 * platform/ios/QuickLook.mm: 34 (WebCore::removeQLPreviewConverterForURL): 35 (WebCore::addQLPreviewConverterWithFileForURL): 36 (WebCore::qlPreviewConverterDictionaryMutex): Deleted. 37 * platform/ios/WebSQLiteDatabaseTrackerClient.mm: 38 (+[WebDatabaseTransactionBackgroundTaskController startBackgroundTask]): 39 (+[WebDatabaseTransactionBackgroundTaskController endBackgroundTask]): 40 (transactionBackgroundTaskIdentifierLock): Deleted. 41 * platform/network/curl/CurlContext.cpp: 42 (WebCore::CurlShareHandle::lockCallback): 43 (WebCore::CurlShareHandle::unlockCallback): 44 (WebCore::CurlShareHandle::mutexFor): 45 * platform/network/curl/CurlContext.h: 46 1 47 2017-12-07 Brady Eidson <beidson@apple.com> 2 48 -
trunk/Source/WebCore/Modules/webdatabase/Database.cpp
r225470 r225662 342 342 { 343 343 // Make sure we wait till the background removal of the empty database files finished before trying to open any database. 344 LockHolder locker(DatabaseTracker::openDatabaseMutex());344 auto locker = holdLock(DatabaseTracker::openDatabaseMutex()); 345 345 } 346 346 #endif -
trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp
r224371 r225662 1276 1276 } 1277 1277 1278 Lock& DatabaseTracker::openDatabaseMutex() 1279 { 1280 static NeverDestroyed<Lock> mutex; 1281 return mutex;1278 static StaticLock openDatabaseLock; 1279 StaticLock& DatabaseTracker::openDatabaseMutex() 1280 { 1281 return openDatabaseLock; 1282 1282 } 1283 1283 … … 1286 1286 // Lock the database from opening any database until we are done with scanning the file system for 1287 1287 // zero byte database files to remove. 1288 openDatabase Mutex().lock();1288 openDatabaseLock.lock(); 1289 1289 } 1290 1290 1291 1291 void DatabaseTracker::emptyDatabaseFilesRemovalTaskDidFinish() 1292 1292 { 1293 openDatabase Mutex().unlock();1293 openDatabaseLock.unlock(); 1294 1294 } 1295 1295 … … 1301 1301 } 1302 1302 1303 static Lock& notificationMutex() 1304 { 1305 static NeverDestroyed<Lock> mutex; 1306 return mutex; 1307 } 1303 static StaticLock notificationLock; 1308 1304 1309 1305 using NotificationQueue = Vector<std::pair<SecurityOriginData, String>>; … … 1317 1313 void DatabaseTracker::scheduleNotifyDatabaseChanged(const SecurityOriginData& origin, const String& name) 1318 1314 { 1319 LockHolder locker(notificationMutex());1315 auto locker = holdLock(notificationLock); 1320 1316 notificationQueue().append(std::make_pair(origin.isolatedCopy(), name.isolatedCopy())); 1321 1317 scheduleForNotification(); … … 1326 1322 void DatabaseTracker::scheduleForNotification() 1327 1323 { 1328 ASSERT(!notification Mutex().tryLock());1324 ASSERT(!notificationLock.tryLock()); 1329 1325 1330 1326 if (!notificationScheduled) { … … 1344 1340 NotificationQueue notifications; 1345 1341 { 1346 LockHolder locker(notificationMutex());1342 auto locker = holdLock(notificationLock); 1347 1343 notifications.swap(notificationQueue()); 1348 1344 notificationScheduled = false; -
trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.h
r223427 r225662 101 101 // clean up zero byte database files. Any operations to open new database will have to 102 102 // wait for that task to finish by waiting on this mutex. 103 static Lock& openDatabaseMutex();103 static StaticLock& openDatabaseMutex(); 104 104 105 105 WEBCORE_EXPORT static void emptyDatabaseFilesRemovalTaskWillBeScheduled(); -
trunk/Source/WebCore/platform/URL.cpp
r225117 r225662 276 276 #endif 277 277 278 static Lock& defaultPortForProtocolMapForTestingLock() 279 { 280 static NeverDestroyed<Lock> lock; 281 return lock; 282 } 278 static StaticLock defaultPortForProtocolMapForTestingLock; 283 279 284 280 using DefaultPortForProtocolMapForTesting = HashMap<String, uint16_t>; … … 299 295 void registerDefaultPortForProtocolForTesting(uint16_t port, const String& protocol) 300 296 { 301 LockHolder locker(defaultPortForProtocolMapForTestingLock());297 auto locker = holdLock(defaultPortForProtocolMapForTestingLock); 302 298 ensureDefaultPortForProtocolMapForTesting().add(protocol, port); 303 299 } … … 305 301 void clearDefaultPortForProtocolMapForTesting() 306 302 { 307 LockHolder locker(defaultPortForProtocolMapForTestingLock());303 auto locker = holdLock(defaultPortForProtocolMapForTestingLock); 308 304 if (auto* map = defaultPortForProtocolMapForTesting()) 309 305 map->clear(); … … 313 309 { 314 310 if (auto* overrideMap = defaultPortForProtocolMapForTesting()) { 315 LockHolder locker(defaultPortForProtocolMapForTestingLock());311 auto locker = holdLock(defaultPortForProtocolMapForTestingLock); 316 312 ASSERT(overrideMap); // No need to null check again here since overrideMap cannot become null after being non-null. 317 313 auto iterator = overrideMap->find(protocol.toStringWithoutCopying()); -
trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp
r225594 r225662 211 211 static void addMediaEngine(CreateMediaEnginePlayer&&, MediaEngineSupportedTypes, MediaEngineSupportsType, MediaEngineOriginsInMediaCache, MediaEngineClearMediaCache, MediaEngineClearMediaCacheForOrigins, MediaEngineSupportsKeySystem); 212 212 213 static Lock& mediaEngineVectorLock() 214 { 215 static NeverDestroyed<Lock> lock; 216 return lock; 217 } 213 static StaticLock mediaEngineVectorLock; 218 214 219 215 static bool& haveMediaEnginesVector() … … 231 227 static void buildMediaEnginesVector() 232 228 { 233 ASSERT(mediaEngineVectorLock ().isLocked());229 ASSERT(mediaEngineVectorLock.isLocked()); 234 230 235 231 #if USE(AVFOUNDATION) … … 277 273 { 278 274 { 279 LockHolder lock(mediaEngineVectorLock());275 auto locker = holdLock(mediaEngineVectorLock); 280 276 if (!haveMediaEnginesVector()) 281 277 buildMediaEnginesVector(); … … 1389 1385 void MediaPlayer::resetMediaEngines() 1390 1386 { 1391 LockHolder lock(mediaEngineVectorLock());1387 auto locker = holdLock(mediaEngineVectorLock); 1392 1388 1393 1389 mutableInstalledMediaEnginesVector().clear(); -
trunk/Source/WebCore/platform/ios/QuickLook.mm
r224371 r225662 47 47 } 48 48 49 static Lock& qlPreviewConverterDictionaryMutex() 50 { 51 static NeverDestroyed<Lock> mutex; 52 return mutex; 53 } 49 static StaticLock qlPreviewConverterDictionaryLock; 54 50 55 51 static NSMutableDictionary *QLPreviewConverterDictionary() … … 67 63 void removeQLPreviewConverterForURL(NSURL *url) 68 64 { 69 LockHolder lock(qlPreviewConverterDictionaryMutex());65 auto locker = holdLock(qlPreviewConverterDictionaryLock); 70 66 [QLPreviewConverterDictionary() removeObjectForKey:url]; 71 67 [QLContentDictionary() removeObjectForKey:url]; … … 76 72 ASSERT(url); 77 73 ASSERT(converter); 78 LockHolder lock(qlPreviewConverterDictionaryMutex());74 auto locker = holdLock(qlPreviewConverterDictionaryLock); 79 75 [QLPreviewConverterDictionary() setObject:converter forKey:url]; 80 76 [QLContentDictionary() setObject:(fileName ? fileName : @"") forKey:url]; -
trunk/Source/WebCore/platform/ios/WebSQLiteDatabaseTrackerClient.mm
r224452 r225662 85 85 } 86 86 87 static Lock& transactionBackgroundTaskIdentifierLock() 88 { 89 static NeverDestroyed<Lock> mutex; 90 return mutex; 91 } 87 static StaticLock transactionBackgroundTaskIdentifierLock; 92 88 93 89 static NSUInteger transactionBackgroundTaskIdentifier; … … 112 108 + (void)startBackgroundTask 113 109 { 114 LockHolder lock(transactionBackgroundTaskIdentifierLock());110 auto locker = holdLock(transactionBackgroundTaskIdentifierLock); 115 111 116 112 // If there's already an existing background task going on, there's no need to start a new one. … … 127 123 + (void)endBackgroundTask 128 124 { 129 LockHolder lock(transactionBackgroundTaskIdentifierLock());125 auto locker = holdLock(transactionBackgroundTaskIdentifierLock); 130 126 131 127 // It is possible that we were unable to start the background task when the first transaction began. -
trunk/Source/WebCore/platform/network/curl/CurlContext.cpp
r223838 r225662 179 179 void CurlShareHandle::lockCallback(CURL*, curl_lock_data data, curl_lock_access, void*) 180 180 { 181 if ( Lock* mutex = mutexFor(data))181 if (auto* mutex = mutexFor(data)) 182 182 mutex->lock(); 183 183 } … … 185 185 void CurlShareHandle::unlockCallback(CURL*, curl_lock_data data, void*) 186 186 { 187 if ( Lock* mutex = mutexFor(data))187 if (auto* mutex = mutexFor(data)) 188 188 mutex->unlock(); 189 189 } 190 190 191 Lock* CurlShareHandle::mutexFor(curl_lock_data data)192 { 193 static NeverDestroyed<Lock>cookieMutex;194 static NeverDestroyed<Lock>dnsMutex;195 static NeverDestroyed<Lock>shareMutex;191 StaticLock* CurlShareHandle::mutexFor(curl_lock_data data) 192 { 193 static StaticLock cookieMutex; 194 static StaticLock dnsMutex; 195 static StaticLock shareMutex; 196 196 197 197 switch (data) { 198 198 case CURL_LOCK_DATA_COOKIE: 199 return &cookieMutex .get();199 return &cookieMutex; 200 200 case CURL_LOCK_DATA_DNS: 201 return &dnsMutex .get();201 return &dnsMutex; 202 202 case CURL_LOCK_DATA_SHARE: 203 return &shareMutex .get();203 return &shareMutex; 204 204 default: 205 205 ASSERT_NOT_REACHED(); -
trunk/Source/WebCore/platform/network/curl/CurlContext.h
r223752 r225662 84 84 static void lockCallback(CURL*, curl_lock_data, curl_lock_access, void*); 85 85 static void unlockCallback(CURL*, curl_lock_data, void*); 86 static Lock* mutexFor(curl_lock_data);86 static StaticLock* mutexFor(curl_lock_data); 87 87 88 88 CURLSH* m_shareHandle { nullptr }; -
trunk/Source/WebKitLegacy/ios/ChangeLog
r224734 r225662 1 2017-12-07 Yusuke Suzuki <utatane.tea@gmail.com> 2 3 Use StaticLock instead of NeverDestroyed<Lock> 4 https://bugs.webkit.org/show_bug.cgi?id=180507 5 6 Reviewed by Saam Barati. 7 8 * WebCoreSupport/WebFixedPositionContent.mm: 9 (-[WebFixedPositionContent scrollOrZoomChanged:]): 10 (-[WebFixedPositionContent overflowScrollPositionForLayer:changedTo:]): 11 (-[WebFixedPositionContent setViewportConstrainedLayers:stickyContainerMap:]): 12 (-[WebFixedPositionContent hasFixedOrStickyPositionLayers]): 13 (WebFixedPositionContentDataLock): Deleted. 14 1 15 2017-11-11 Megan Gardner <megan_gardner@apple.com> 2 16 -
trunk/Source/WebKitLegacy/ios/WebCoreSupport/WebFixedPositionContent.mm
r220506 r225662 50 50 using namespace std; 51 51 52 static Lock& WebFixedPositionContentDataLock() 53 { 54 static NeverDestroyed<Lock> mutex; 55 return mutex; 56 } 52 static StaticLock webFixedPositionContentDataLock; 57 53 58 54 struct ViewportConstrainedLayerData { … … 105 101 - (void)scrollOrZoomChanged:(CGRect)positionedObjectsRect 106 102 { 107 LockHolder lock(WebFixedPositionContentDataLock());103 auto locker = holdLock(webFixedPositionContentDataLock); 108 104 109 105 LayerInfoMap::const_iterator end = _private->m_viewportConstrainedLayers.end(); … … 144 140 - (void)overflowScrollPositionForLayer:(CALayer *)scrollLayer changedTo:(CGPoint)scrollPosition 145 141 { 146 LockHolder lock(WebFixedPositionContentDataLock());142 auto locker = holdLock(webFixedPositionContentDataLock); 147 143 148 144 LayerInfoMap::const_iterator end = _private->m_viewportConstrainedLayers.end(); … … 177 173 - (void)setViewportConstrainedLayers:(WTF::HashMap<CALayer *, std::unique_ptr<WebCore::ViewportConstraints>>&)layerMap stickyContainerMap:(WTF::HashMap<CALayer*, CALayer*>&)stickyContainers 178 174 { 179 LockHolder lock(WebFixedPositionContentDataLock());175 auto locker = holdLock(webFixedPositionContentDataLock); 180 176 181 177 _private->m_viewportConstrainedLayers.clear(); … … 194 190 - (BOOL)hasFixedOrStickyPositionLayers 195 191 { 196 LockHolder lock(WebFixedPositionContentDataLock());192 auto locker = holdLock(webFixedPositionContentDataLock); 197 193 return !_private->m_viewportConstrainedLayers.isEmpty(); 198 194 } -
trunk/Source/WebKitLegacy/win/ChangeLog
r225535 r225662 1 2017-12-07 Yusuke Suzuki <utatane.tea@gmail.com> 2 3 Use StaticLock instead of NeverDestroyed<Lock> 4 https://bugs.webkit.org/show_bug.cgi?id=180507 5 6 Reviewed by Saam Barati. 7 8 * WebLocalizableStrings.cpp: 9 (findCachedString): 10 (cacheString): 11 (mainBundleLocStrings): Deleted. 12 (frameworkLocStringsMutex): Deleted. 13 1 14 2017-12-05 Per Arne Vollan <pvollan@apple.com> 2 15 -
trunk/Source/WebKitLegacy/win/WebLocalizableStrings.cpp
r219858 r225662 46 46 typedef HashMap<String, LocalizedString*> LocalizedStringMap; 47 47 48 static Lock& mainBundleLocStringsMutex() 49 { 50 static NeverDestroyed<Lock> mutex; 51 return mutex; 52 } 48 static StaticLock mainBundleLocStringsLock; 53 49 54 50 static LocalizedStringMap& mainBundleLocStrings() … … 58 54 } 59 55 60 static Lock& frameworkLocStringsMutex() 61 { 62 static NeverDestroyed<Lock> mutex; 63 return mutex; 64 } 56 static StaticLock frameworkLocStringsLock; 65 57 66 58 static LocalizedStringMap frameworkLocStrings() … … 177 169 { 178 170 if (!stringsBundle) { 179 LockHolder lock(mainBundleLocStringsMutex());171 auto locker = holdLock(mainBundleLocStringsLock); 180 172 return mainBundleLocStrings().get(key); 181 173 } 182 174 183 175 if (stringsBundle->bundle == WebKitLocalizableStringsBundle.bundle) { 184 LockHolder lock(frameworkLocStringsMutex());176 auto locker = holdLock(frameworkLocStringsLock); 185 177 return frameworkLocStrings().get(key); 186 178 } … … 192 184 { 193 185 if (!stringsBundle) { 194 LockHolder lock(mainBundleLocStringsMutex());186 auto locker = holdLock(mainBundleLocStringsLock); 195 187 mainBundleLocStrings().set(key, value); 196 188 return; 197 189 } 198 190 199 LockHolder lock(frameworkLocStringsMutex());191 auto locker = holdLock(frameworkLocStringsLock); 200 192 frameworkLocStrings().set(key, value); 201 193 } -
trunk/Tools/ChangeLog
r225645 r225662 1 2017-12-07 Yusuke Suzuki <utatane.tea@gmail.com> 2 3 Use StaticLock instead of NeverDestroyed<Lock> 4 https://bugs.webkit.org/show_bug.cgi?id=180507 5 6 Reviewed by Saam Barati. 7 8 * DumpRenderTree/JavaScriptThreading.cpp: 9 (javaScriptThreads): 10 (runJavaScriptThread): 11 (startJavaScriptThreads): 12 (stopJavaScriptThreads): 13 (javaScriptThreadsMutex): Deleted. 14 1 15 2017-12-07 Alex Christensen <achristensen@webkit.org> 2 16 -
trunk/Tools/DumpRenderTree/JavaScriptThreading.cpp
r223238 r225662 46 46 static bool javaScriptThreadsShouldTerminate; 47 47 static JSContextGroupRef javaScriptThreadsGroup; 48 49 static Lock& javaScriptThreadsMutex() 50 { 51 static NeverDestroyed<Lock> staticMutex; 52 return staticMutex; 53 } 48 static StaticLock javaScriptThreadsLock; 54 49 55 50 typedef HashSet<RefPtr<Thread>> ThreadSet; … … 57 52 { 58 53 static NeverDestroyed<ThreadSet> staticJavaScriptThreads; 59 ASSERT(!javaScriptThreads Mutex().tryLock());54 ASSERT(!javaScriptThreadsLock.tryLock()); 60 55 return staticJavaScriptThreads; 61 56 } … … 73 68 JSGlobalContextRef ctx; 74 69 { 75 LockHolder locker(javaScriptThreadsMutex());70 auto locker = holdLock(javaScriptThreadsLock); 76 71 ctx = JSGlobalContextCreateInGroup(javaScriptThreadsGroup, 0); 77 72 } … … 79 74 JSStringRef scriptRef; 80 75 { 81 LockHolder locker(javaScriptThreadsMutex());76 auto locker = holdLock(javaScriptThreadsLock); 82 77 scriptRef = JSStringCreateWithUTF8CString(script); 83 78 } … … 85 80 while (true) { 86 81 { 87 LockHolder locker(javaScriptThreadsMutex());82 auto locker = holdLock(javaScriptThreadsLock); 88 83 JSValueRef exception = 0; 89 84 JSEvaluateScript(ctx, scriptRef, 0, 0, 1, &exception); … … 92 87 93 88 { 94 LockHolder locker(javaScriptThreadsMutex());89 auto locker = holdLock(javaScriptThreadsLock); 95 90 const size_t valuesCount = 1024; 96 91 JSValueRef values[valuesCount]; … … 100 95 101 96 { 102 LockHolder locker(javaScriptThreadsMutex());97 auto locker = holdLock(javaScriptThreadsLock); 103 98 if (javaScriptThreadsShouldTerminate) 104 99 break; … … 109 104 continue; 110 105 111 LockHolder locker(javaScriptThreadsMutex());106 auto locker = holdLock(javaScriptThreadsLock); 112 107 Thread& thread = Thread::current(); 113 108 thread.detach(); … … 117 112 } 118 113 119 LockHolder locker(javaScriptThreadsMutex());114 auto locker = holdLock(javaScriptThreadsLock); 120 115 JSStringRelease(scriptRef); 121 116 JSGarbageCollect(ctx); … … 127 122 javaScriptThreadsGroup = JSContextGroupCreate(); 128 123 129 LockHolder locker(javaScriptThreadsMutex());124 auto locker = holdLock(javaScriptThreadsLock); 130 125 131 126 for (size_t i = 0; i < javaScriptThreadsCount; ++i) … … 136 131 { 137 132 { 138 LockHolder locker(javaScriptThreadsMutex());133 auto locker = holdLock(javaScriptThreadsLock); 139 134 javaScriptThreadsShouldTerminate = true; 140 135 } … … 142 137 Vector<RefPtr<Thread>, javaScriptThreadsCount> threads; 143 138 { 144 LockHolder locker(javaScriptThreadsMutex());139 auto locker = holdLock(javaScriptThreadsLock); 145 140 threads = copyToVector(javaScriptThreads()); 146 141 ASSERT(threads.size() == javaScriptThreadsCount); … … 151 146 152 147 { 153 LockHolder locker(javaScriptThreadsMutex());148 auto locker = holdLock(javaScriptThreadsLock); 154 149 javaScriptThreads().clear(); 155 150 }
Note: See TracChangeset
for help on using the changeset viewer.