Changeset 116969 in webkit
- Timestamp:
- May 14, 2012 11:04:17 AM (12 years ago)
- Location:
- trunk/Source
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/loader/icon/IconDatabase.cpp
r116198 r116969 223 223 224 224 MutexLocker locker(m_urlAndIconLock); 225 226 if (m_retainOrReleaseIconRequested) 227 performPendingRetainAndReleaseOperations(); 225 228 226 229 String pageURLCopy; // Creates a null string for easy testing … … 390 393 } 391 394 392 393 void IconDatabase::retainIconForPageURL(const String& pageURLOriginal) 394 { 395 void IconDatabase::retainIconForPageURL(const String& pageURL) 396 { 395 397 ASSERT_NOT_SYNC_THREAD(); 396 397 // Cannot do anything with pageURLOriginal that would end up storing it without deep copying first 398 399 if (!isEnabled() || !documentCanHaveIcon(pageURLOriginal)) 398 399 if (!isEnabled() || !documentCanHaveIcon(pageURL)) 400 400 return; 401 401 402 MutexLocker locker(m_urlAndIconLock); 403 402 MutexLocker locker(m_urlsToRetainOrReleaseLock); 403 m_urlsToRetain.append(pageURL); 404 scheduleOrDeferSyncTimer(); 405 } 406 407 void IconDatabase::performRetainIconForPageURL(const String& pageURLOriginal) 408 { 404 409 PageURLRecord* record = m_pageURLToRecordMap.get(pageURLOriginal); 405 410 … … 435 440 } 436 441 437 void IconDatabase::releaseIconForPageURL(const String& pageURL Original)442 void IconDatabase::releaseIconForPageURL(const String& pageURL) 438 443 { 439 444 ASSERT_NOT_SYNC_THREAD(); … … 441 446 // Cannot do anything with pageURLOriginal that would end up storing it without deep copying first 442 447 443 if (!isEnabled() || !documentCanHaveIcon(pageURLOriginal)) 444 return; 445 446 MutexLocker locker(m_urlAndIconLock); 447 448 if (!isEnabled() || !documentCanHaveIcon(pageURL)) 449 return; 450 451 MutexLocker locker(m_urlsToRetainOrReleaseLock); 452 m_urlsToRelease.append(pageURL); 453 m_retainOrReleaseIconRequested = true; 454 scheduleOrDeferSyncTimer(); 455 } 456 457 void IconDatabase::performReleaseIconForPageURL(const String& pageURLOriginal) 458 { 448 459 // Check if this pageURL is actually retained 449 460 if (!m_retainedPageURLs.contains(pageURLOriginal)) { … … 499 510 500 511 delete pageRecord; 501 502 if (isOpen())503 scheduleOrDeferSyncTimer();504 512 } 505 513 … … 737 745 { 738 746 MutexLocker locker(m_urlAndIconLock); 747 748 if (m_retainOrReleaseIconRequested) 749 performPendingRetainAndReleaseOperations(); 750 739 751 return m_retainedPageURLs.size(); 740 752 } … … 1307 1319 { 1308 1320 MutexLocker locker(m_urlAndIconLock); 1309 1321 1322 if (m_retainOrReleaseIconRequested) 1323 performPendingRetainAndReleaseOperations(); 1324 1310 1325 for (unsigned i = 0; i < urls.size(); ++i) { 1311 1326 if (!m_retainedPageURLs.contains(urls[i])) { … … 1388 1403 if (m_threadTerminationRequested) 1389 1404 break; 1405 1406 if (m_retainOrReleaseIconRequested) { 1407 MutexLocker locker(m_urlAndIconLock); 1408 performPendingRetainAndReleaseOperations(); 1409 } 1390 1410 1391 1411 bool didAnyWork = true; … … 1470 1490 m_disabledSuddenTerminationForSyncThread = false; 1471 1491 } 1492 } 1493 1494 void IconDatabase::performPendingRetainAndReleaseOperations() 1495 { 1496 ASSERT(m_retainOrReleaseIconRequested); 1497 1498 // NOTE: The caller is assumed to hold m_urlAndIconLock. 1499 1500 MutexLocker vectorLocker(m_urlsToRetainOrReleaseLock); 1501 1502 for (unsigned i = 0; i < m_urlsToRetain.size(); ++i) 1503 performRetainIconForPageURL(m_urlsToRetain[i]); 1504 for (unsigned i = 0; i < m_urlsToRelease.size(); ++i) 1505 performReleaseIconForPageURL(m_urlsToRelease[i]); 1506 printf("Retained %lu, released %lu\n", m_urlsToRetain.size(), m_urlsToRelease.size()); 1507 1508 m_urlsToRetain.clear(); 1509 m_urlsToRelease.clear(); 1510 m_retainOrReleaseIconRequested = false; 1472 1511 } 1473 1512 -
trunk/Source/WebCore/loader/icon/IconDatabase.h
r109527 r116969 160 160 bool m_syncThreadHasWorkToDo; 161 161 bool m_disabledSuddenTerminationForSyncThread; 162 bool m_retainOrReleaseIconRequested; 162 163 163 164 Mutex m_urlAndIconLock; … … 177 178 HashSet<String> m_pageURLsInterestedInIcons; 178 179 HashSet<IconRecord*> m_iconsPendingReading; 180 181 Mutex m_urlsToRetainOrReleaseLock; 182 // Holding m_urlsToRetainOrReleaseLock is required when accessing any of the following data structures. 183 Vector<String> m_urlsToRetain; 184 Vector<String> m_urlsToRelease; 179 185 180 186 // *** Sync Thread Only *** … … 203 209 void deleteAllPreparedStatements(); 204 210 void* cleanupSyncThread(); 211 void performRetainIconForPageURL(const String&); 212 void performReleaseIconForPageURL(const String&); 205 213 206 214 // Record (on disk) whether or not Safari 2-style icons were imported (once per dataabse) … … 221 229 void removeIconFromSQLDatabase(const String& iconURL); 222 230 void writeIconSnapshotToSQLDatabase(const IconSnapshot&); 223 231 232 void performPendingRetainAndReleaseOperations(); 233 224 234 // Methods to dispatch client callbacks on the main thread 225 235 void dispatchDidImportIconURLForPageURLOnMainThread(const String&); -
trunk/Source/WebKit2/ChangeLog
r116967 r116969 1 2012-05-14 Andreas Kling <kling@webkit.org> 2 3 REGRESSION(r116796): Assertion failure in API tests 4 <http://webkit.org/b/86378> 5 <rdar://problem/10777218> 6 7 Reviewed by Anders Carlsson. 8 9 Invalidate the plugin work queue in ~WebContext to avoid hitting 10 the !m_isValid assertion in ~WorkQueue later on. 11 12 * UIProcess/WebContext.cpp: 13 (WebKit::WebContext::~WebContext): 14 1 15 2012-05-14 Csaba Osztrogonác <ossy@webkit.org> 2 16 -
trunk/Source/WebKit2/UIProcess/WebContext.cpp
r116796 r116969 167 167 WebContext::~WebContext() 168 168 { 169 m_pluginWorkQueue.invalidate(); 170 169 171 if (m_process && m_process->isValid()) 170 172 m_process->connection()->removeQueueClient(this);
Note: See TracChangeset
for help on using the changeset viewer.