Changeset 30154 in webkit
- Timestamp:
- Feb 11, 2008 2:54:53 PM (16 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r30153 r30154 1 2008-02-11 Timothy Hatcher <timothy@apple.com> 2 3 Reviewed by Brady Eidson. 4 5 <rdar://problem/5733069> Many m_quotaMap uses do not hold the m_quotaMapGuard 6 7 * storage/DatabaseTracker.cpp: 8 (WebCore::DatabaseTracker::hasEntryForOrigin): Hold m_quotaMapGuard when using m_quotaMap. 9 (WebCore::DatabaseTracker::origins): Ditto. 10 (WebCore::DatabaseTracker::setQuota): Ditto. 11 (WebCore::DatabaseTracker::deleteAllDatabases): Call origins() and itterate over the 12 origins to call deleteOrigin(). 13 (WebCore::DatabaseTracker::deleteOrigin): Hold m_quotaMapGuard when using m_quotaMap. 14 1 15 2008-02-11 David Hyatt <hyatt@apple.com> 2 16 -
trunk/WebCore/storage/DatabaseTracker.cpp
r30104 r30154 163 163 ASSERT(currentThread() == m_thread); 164 164 populateOrigins(); 165 MutexLocker lockQuotaMap(m_quotaMapGuard); 165 166 return m_quotaMap->contains(origin); 166 167 } … … 299 300 ASSERT(currentThread() == m_thread); 300 301 populateOrigins(); 302 MutexLocker lockQuotaMap(m_quotaMapGuard); 301 303 copyKeysToVector(*m_quotaMap, result); 302 304 } … … 536 538 if (!m_database.isOpen()) 537 539 return; 538 if (!m_quotaMap->contains(origin)) {539 SQLiteStatement statement(m_database, "INSERT INTO Origins VALUES (?, ?)");540 if (statement.prepare() != SQLResultOk) {541 LOG_ERROR("Unable to establish origin %s in the tracker", origin->stringIdentifier().ascii().data());542 } else {543 statement.bindText(1, origin->stringIdentifier());544 statement.bindInt64(2, quota);545 546 if (statement.step() != SQLResultDone)547 LOG_ERROR("Unable to establish origin %s in the tracker", origin->stringIdentifier().ascii().data());548 }549 } else {550 SQLiteStatement statement(m_database, "UPDATE Origins SET quota=? WHERE origin=?");551 bool error = statement.prepare() != SQLResultOk;552 if (!error) {553 statement.bindInt64(1, quota);554 statement.bindText(2, origin->stringIdentifier());555 556 error = !statement.executeCommand();557 }558 if (error)559 LOG_ERROR("Failed to set quota %llu in tracker database for origin %s", quota, origin->stringIdentifier().ascii().data());560 }561 // FIXME: Is it really OK to update the quota in memory if we failed to update it on disk?562 540 563 541 { 564 542 MutexLocker lockQuotaMap(m_quotaMapGuard); 543 544 if (!m_quotaMap->contains(origin)) { 545 SQLiteStatement statement(m_database, "INSERT INTO Origins VALUES (?, ?)"); 546 if (statement.prepare() != SQLResultOk) { 547 LOG_ERROR("Unable to establish origin %s in the tracker", origin->stringIdentifier().ascii().data()); 548 } else { 549 statement.bindText(1, origin->stringIdentifier()); 550 statement.bindInt64(2, quota); 551 552 if (statement.step() != SQLResultDone) 553 LOG_ERROR("Unable to establish origin %s in the tracker", origin->stringIdentifier().ascii().data()); 554 } 555 } else { 556 SQLiteStatement statement(m_database, "UPDATE Origins SET quota=? WHERE origin=?"); 557 bool error = statement.prepare() != SQLResultOk; 558 if (!error) { 559 statement.bindInt64(1, quota); 560 statement.bindText(2, origin->stringIdentifier()); 561 562 error = !statement.executeCommand(); 563 } 564 565 if (error) 566 LOG_ERROR("Failed to set quota %llu in tracker database for origin %s", quota, origin->stringIdentifier().ascii().data()); 567 } 568 569 // FIXME: Is it really OK to update the quota in memory if we failed to update it on disk? 565 570 m_quotaMap->set(origin, quota); 566 571 } 567 572 568 573 if (m_client) 569 574 m_client->dispatchDidModifyOrigin(origin); 570 575 } 571 576 572 577 bool DatabaseTracker::addDatabase(SecurityOrigin* origin, const String& name, const String& path) 573 578 { … … 603 608 { 604 609 ASSERT(currentThread() == m_thread); 605 populateOrigins(); 606 607 QuotaMap quotaMapCopy = *m_quotaMap;608 QuotaMap::const_iterator end = quotaMapCopy.end(); 609 for ( QuotaMap::const_iterator iter = quotaMapCopy.begin(); iter != end; ++iter)610 deleteOrigin( iter->first.get());610 611 Vector<RefPtr<SecurityOrigin> > originsCopy; 612 origins(originsCopy); 613 614 for (unsigned i = 0; i < originsCopy.size(); ++i) 615 deleteOrigin(originsCopy[i].get()); 611 616 } 612 617 … … 663 668 MutexLocker lockQuotaMap(m_quotaMapGuard); 664 669 m_quotaMap->remove(origin); 670 665 671 Locker<OriginQuotaManager> quotaManagerLocker(originQuotaManager()); 666 672 originQuotaManager().removeOrigin(origin); 667 } 668 669 // If we removed the last origin, do some additional deletion.670 if (m_quotaMap->isEmpty()) {671 if (m_database.isOpen())672 m_database.close();673 deleteFile(trackerDatabasePath());674 deleteEmptyDirectory(m_databaseDirectoryPath);673 674 // If we removed the last origin, do some additional deletion. 675 if (m_quotaMap->isEmpty()) { 676 if (m_database.isOpen()) 677 m_database.close(); 678 deleteFile(trackerDatabasePath()); 679 deleteEmptyDirectory(m_databaseDirectoryPath); 680 } 675 681 } 676 682
Note: See TracChangeset
for help on using the changeset viewer.