Changeset 64334 in webkit
- Timestamp:
- Jul 29, 2010 10:09:47 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 6 deleted
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r64327 r64334 1 2010-07-29 Sheriff Bot <webkit.review.bot@gmail.com> 2 3 Unreviewed, rolling out r64313. 4 http://trac.webkit.org/changeset/64313 5 https://bugs.webkit.org/show_bug.cgi?id=43233 6 7 Some Chromium bots are not happy with it for some unknown 8 reason. (Requested by dumi on #webkit). 9 10 * JavaScriptCore.exp: 11 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 12 * wtf/Threading.h: 13 * wtf/ThreadingPthreads.cpp: 14 * wtf/ThreadingWin.cpp: 15 * wtf/gtk/ThreadingGtk.cpp: 16 * wtf/qt/ThreadingQt.cpp: 17 1 18 2010-07-29 Sheriff Bot <webkit.review.bot@gmail.com> 2 19 -
trunk/JavaScriptCore/JavaScriptCore.exp
r64313 r64334 368 368 __ZN3WTF5MutexC1Ev 369 369 __ZN3WTF5MutexD1Ev 370 __ZN3WTF5yieldEv371 370 __ZN3WTF6strtodEPKcPPc 372 371 __ZN3WTF7CString11mutableDataEv -
trunk/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
r64313 r64334 331 331 ?waitForThreadCompletion@WTF@@YAHIPAPAX@Z 332 332 ?writable@PropertyDescriptor@JSC@@QBE_NXZ 333 ?yield@WTF@@YAXXZ334 333 WTFLog 335 334 WTFLogVerbose -
trunk/JavaScriptCore/wtf/Threading.h
r64313 r64334 102 102 void detachThread(ThreadIdentifier); 103 103 104 void yield();105 104 106 105 void lockAtomicallyInitializedStaticMutex(); … … 114 113 using WTF::detachThread; 115 114 using WTF::waitForThreadCompletion; 116 using WTF::yield;117 115 118 116 #endif // Threading_h -
trunk/JavaScriptCore/wtf/ThreadingPthreads.cpp
r64313 r64334 45 45 #if !COMPILER(MSVC) 46 46 #include <limits.h> 47 #include <sched.h>48 47 #include <sys/time.h> 49 48 #endif … … 223 222 } 224 223 225 void yield()226 {227 sched_yield();228 }229 230 224 ThreadIdentifier currentThread() 231 225 { -
trunk/JavaScriptCore/wtf/ThreadingWin.cpp
r64313 r64334 265 265 CloseHandle(threadHandle); 266 266 clearThreadHandleForIdentifier(threadID); 267 }268 269 void yield()270 {271 ::Sleep(1);272 267 } 273 268 -
trunk/JavaScriptCore/wtf/gtk/ThreadingGtk.cpp
r64313 r64334 168 168 } 169 169 170 void yield()171 {172 g_thread_yield();173 }174 175 170 Mutex::Mutex() 176 171 : m_mutex(g_mutex_new()) -
trunk/JavaScriptCore/wtf/qt/ThreadingQt.cpp
r64313 r64334 209 209 } 210 210 211 void yield()212 {213 QThread::yieldCurrentThread();214 }215 216 211 Mutex::Mutex() 217 212 : m_mutex(new QMutex()) -
trunk/LayoutTests/ChangeLog
r64329 r64334 1 2010-07-29 Sheriff Bot <webkit.review.bot@gmail.com> 2 3 Unreviewed, rolling out r64313. 4 http://trac.webkit.org/changeset/64313 5 https://bugs.webkit.org/show_bug.cgi?id=43233 6 7 Some Chromium bots are not happy with it for some unknown 8 reason. (Requested by dumi on #webkit). 9 10 * fast/workers/storage/interrupt-database-expected.txt: Removed. 11 * fast/workers/storage/interrupt-database-sync-expected.txt: Removed. 12 * fast/workers/storage/interrupt-database-sync.html: Removed. 13 * fast/workers/storage/interrupt-database.html: Removed. 14 * fast/workers/storage/resources/interrupt-database-sync.js: Removed. 15 * fast/workers/storage/resources/interrupt-database.js: Removed. 16 1 17 2010-07-29 Victor Wang <victorw@chromium.org> 2 18 -
trunk/WebCore/ChangeLog
r64322 r64334 1 2010-07-29 Sheriff Bot <webkit.review.bot@gmail.com> 2 3 Unreviewed, rolling out r64313. 4 http://trac.webkit.org/changeset/64313 5 https://bugs.webkit.org/show_bug.cgi?id=43233 6 7 Some Chromium bots are not happy with it for some unknown 8 reason. (Requested by dumi on #webkit). 9 10 * bindings/js/JSCustomVoidCallback.cpp: 11 (WebCore::JSCustomVoidCallback::~JSCustomVoidCallback): 12 * bindings/scripts/CodeGeneratorJS.pm: 13 * bindings/scripts/test/JS/JSTestCallback.cpp: 14 (WebCore::JSTestCallback::~JSTestCallback): 15 * platform/sql/SQLiteDatabase.cpp: 16 (WebCore::SQLiteDatabase::SQLiteDatabase): 17 (WebCore::SQLiteDatabase::close): 18 (WebCore::SQLiteDatabase::lock): 19 (WebCore::SQLiteDatabase::unlock): 20 * platform/sql/SQLiteDatabase.h: 21 * platform/sql/SQLiteStatement.cpp: 22 (WebCore::SQLiteStatement::prepare): 23 (WebCore::SQLiteStatement::step): 24 * storage/AbstractDatabase.cpp: 25 * storage/AbstractDatabase.h: 26 * storage/DatabaseTracker.cpp: 27 * storage/DatabaseTracker.h: 28 * storage/SQLStatement.cpp: 29 (WebCore::SQLStatement::execute): 30 * storage/SQLStatementSync.cpp: 31 (WebCore::SQLStatementSync::execute): 32 * storage/SQLTransaction.cpp: 33 (WebCore::SQLTransaction::checkAndHandleClosedDatabase): 34 (WebCore::SQLTransaction::performNextStep): 35 (WebCore::SQLTransaction::performPendingCallback): 36 (WebCore::SQLTransaction::deliverTransactionCallback): 37 (WebCore::SQLTransaction::postflightAndCommit): 38 (WebCore::SQLTransaction::deliverTransactionErrorCallback): 39 (WebCore::SQLTransaction::cleanupAfterTransactionErrorCallback): 40 * storage/SQLTransaction.h: 41 * storage/chromium/DatabaseTrackerChromium.cpp: 42 * workers/WorkerThread.cpp: 43 (WebCore::WorkerThread::stop): 44 1 45 2010-07-29 Martin Robinson <mrobinson@igalia.com> 2 46 -
trunk/WebCore/bindings/js/JSCustomVoidCallback.cpp
r64313 r64334 49 49 JSCustomVoidCallback::~JSCustomVoidCallback() 50 50 { 51 if (m_scriptExecutionContext->isContextThread()) 52 delete m_data; 53 else 54 m_scriptExecutionContext->postTask(DeleteCallbackDataTask::create(m_data)); 51 m_scriptExecutionContext->postTask(DeleteCallbackDataTask::create(m_data)); 55 52 #ifndef NDEBUG 56 53 m_data = 0; -
trunk/WebCore/bindings/scripts/CodeGeneratorJS.pm
r64313 r64334 2152 2152 push(@implContent, "${className}::~${className}()\n"); 2153 2153 push(@implContent, "{\n"); 2154 push(@implContent, " if (m_scriptExecutionContext->isContextThread())\n"); 2155 push(@implContent, " delete m_data;\n"); 2156 push(@implContent, " else\n"); 2157 push(@implContent, " m_scriptExecutionContext->postTask(DeleteCallbackDataTask::create(m_data));\n"); 2154 push(@implContent, " m_scriptExecutionContext->postTask(DeleteCallbackDataTask::create(m_data));\n"); 2158 2155 push(@implContent, "#ifndef NDEBUG\n"); 2159 2156 push(@implContent, " m_data = 0;\n"); -
trunk/WebCore/bindings/scripts/test/JS/JSTestCallback.cpp
r64313 r64334 44 44 JSTestCallback::~JSTestCallback() 45 45 { 46 if (m_scriptExecutionContext->isContextThread()) 47 delete m_data; 48 else 49 m_scriptExecutionContext->postTask(DeleteCallbackDataTask::create(m_data)); 46 m_scriptExecutionContext->postTask(DeleteCallbackDataTask::create(m_data)); 50 47 #ifndef NDEBUG 51 48 m_data = 0; -
trunk/WebCore/platform/sql/SQLiteDatabase.cpp
r64313 r64334 32 32 #include "SQLiteFileSystem.h" 33 33 #include "SQLiteStatement.h" 34 34 35 #include <sqlite3.h> 35 #include <wtf/Threading.h>36 36 37 37 namespace WebCore { … … 43 43 const int SQLResultSchema = SQLITE_SCHEMA; 44 44 const int SQLResultFull = SQLITE_FULL; 45 const int SQLResultInterrupt = SQLITE_INTERRUPT; 45 46 46 47 47 SQLiteDatabase::SQLiteDatabase() … … 51 51 , m_sharable(false) 52 52 , m_openingThread(0) 53 , m_interrupted(false)54 53 { 55 54 } … … 85 84 { 86 85 if (m_db) { 87 ASSERT(currentThread() == m_openingThread); 88 sqlite3* db = m_db; 89 { 90 MutexLocker locker(m_databaseClosingMutex); 91 m_db = 0; 92 } 93 sqlite3_close(db); 86 // FIXME: This is being called on themain thread during JS GC. <rdar://problem/5739818> 87 // ASSERT(currentThread() == m_openingThread); 88 sqlite3_close(m_db); 89 m_db = 0; 94 90 } 95 91 96 92 m_openingThread = 0; 97 }98 99 void SQLiteDatabase::interrupt()100 {101 m_interrupted = true;102 while (!m_lockingMutex.tryLock()) {103 MutexLocker locker(m_databaseClosingMutex);104 if (!m_db)105 return;106 sqlite3_interrupt(m_db);107 yield();108 }109 110 m_lockingMutex.unlock();111 }112 113 bool SQLiteDatabase::isInterrupted()114 {115 ASSERT(!m_lockingMutex.tryLock());116 return m_interrupted;117 93 } 118 94 … … 422 398 } 423 399 400 void SQLiteDatabase::lock() 401 { 402 m_lockingMutex.lock(); 403 } 404 405 void SQLiteDatabase::unlock() 406 { 407 m_lockingMutex.unlock(); 408 } 409 424 410 bool SQLiteDatabase::isAutoCommitOn() const 425 411 { -
trunk/WebCore/platform/sql/SQLiteDatabase.h
r64313 r64334 49 49 extern const int SQLResultSchema; 50 50 extern const int SQLResultFull; 51 extern const int SQLResultInterrupt;52 51 53 52 class SQLiteDatabase : public Noncopyable { … … 60 59 bool isOpen() const { return m_db; } 61 60 void close(); 62 void interrupt();63 bool isInterrupted();64 61 65 62 bool executeCommand(const String&); … … 109 106 void setAuthorizer(PassRefPtr<DatabaseAuthorizer>); 110 107 111 Mutex& databaseMutex() { return m_lockingMutex; } 108 // (un)locks the database like a mutex 109 void lock(); 110 void unlock(); 112 111 bool isAutoCommitOn() const; 113 112 … … 151 150 Mutex m_lockingMutex; 152 151 ThreadIdentifier m_openingThread; 153 154 Mutex m_databaseClosingMutex; 155 bool m_interrupted; 152 156 153 }; // class SQLiteDatabase 157 154 -
trunk/WebCore/platform/sql/SQLiteStatement.cpp
r64313 r64334 62 62 { 63 63 ASSERT(!m_isPrepared); 64 65 MutexLocker databaseLock(m_database.databaseMutex());66 if (m_database.isInterrupted())67 return SQLITE_INTERRUPT;68 69 64 const void* tail = 0; 70 65 LOG(SQLDatabase, "SQL - prepare - %s", m_query.ascii().data()); … … 94 89 { 95 90 ASSERT(m_isPrepared); 96 97 MutexLocker databaseLock(m_database.databaseMutex());98 if (m_database.isInterrupted())99 return SQLITE_INTERRUPT;100 101 91 if (!m_statement) 102 92 return SQLITE_OK; -
trunk/WebCore/storage/AbstractDatabase.cpp
r64313 r64334 475 475 } 476 476 477 void AbstractDatabase::interrupt()478 {479 m_sqliteDatabase.interrupt();480 }481 482 bool AbstractDatabase::isInterrupted()483 {484 MutexLocker locker(m_sqliteDatabase.databaseMutex());485 return m_sqliteDatabase.isInterrupted();486 }487 488 477 } // namespace WebCore 489 478 -
trunk/WebCore/storage/AbstractDatabase.h
r64313 r64334 69 69 unsigned long long maximumSize() const; 70 70 void incrementalVacuumIfNeeded(); 71 void interrupt();72 bool isInterrupted();73 71 74 72 // FIXME: move all version-related methods to a DatabaseVersionTracker class -
trunk/WebCore/storage/DatabaseTracker.cpp
r64313 r64334 236 236 } 237 237 238 void DatabaseTracker::interruptAllDatabasesForContext(const ScriptExecutionContext* context)239 {240 Vector<RefPtr<AbstractDatabase> > openDatabases;241 {242 MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);243 244 if (!m_openDatabaseMap)245 return;246 247 DatabaseNameMap* nameMap = m_openDatabaseMap->get(context->securityOrigin());248 if (!nameMap)249 return;250 251 DatabaseNameMap::const_iterator dbNameMapEndIt = nameMap->end();252 for (DatabaseNameMap::const_iterator dbNameMapIt = nameMap->begin(); dbNameMapIt != dbNameMapEndIt; ++dbNameMapIt) {253 DatabaseSet* databaseSet = dbNameMapIt->second;254 DatabaseSet::const_iterator dbSetEndIt = databaseSet->end();255 for (DatabaseSet::const_iterator dbSetIt = databaseSet->begin(); dbSetIt != dbSetEndIt; ++dbSetIt) {256 if ((*dbSetIt)->scriptExecutionContext() == context)257 openDatabases.append(*dbSetIt);258 }259 }260 }261 262 Vector<RefPtr<AbstractDatabase> >::const_iterator openDatabasesEndIt = openDatabases.end();263 for (Vector<RefPtr<AbstractDatabase> >::const_iterator openDatabasesIt = openDatabases.begin(); openDatabasesIt != openDatabasesEndIt; ++openDatabasesIt)264 (*openDatabasesIt)->interrupt();265 }266 267 238 String DatabaseTracker::originPath(SecurityOrigin* origin) const 268 239 { -
trunk/WebCore/storage/DatabaseTracker.h
r64313 r64334 78 78 unsigned long long getMaxSizeForDatabase(const AbstractDatabase*); 79 79 void databaseChanged(AbstractDatabase*); 80 81 void interruptAllDatabasesForContext(const ScriptExecutionContext*);82 80 83 81 private: -
trunk/WebCore/storage/SQLStatement.cpp
r64313 r64334 79 79 if (result != SQLResultOk) { 80 80 LOG(StorageAPI, "Unable to verify correctness of statement %s - error %i (%s)", m_statement.ascii().data(), result, database->lastErrorMsg()); 81 m_error = SQLError::create( result == SQLResultInterrupt ? SQLError::DATABASE_ERR :SQLError::SYNTAX_ERR, database->lastErrorMsg());81 m_error = SQLError::create(SQLError::SYNTAX_ERR, database->lastErrorMsg()); 82 82 return false; 83 83 } … … 87 87 if (statement.bindParameterCount() != m_arguments.size()) { 88 88 LOG(StorageAPI, "Bind parameter count doesn't match number of question marks"); 89 m_error = SQLError::create( db->isInterrupted() ? SQLError::DATABASE_ERR :SQLError::SYNTAX_ERR, "number of '?'s in statement string does not match argument count");89 m_error = SQLError::create(SQLError::SYNTAX_ERR, "number of '?'s in statement string does not match argument count"); 90 90 return false; 91 91 } -
trunk/WebCore/storage/SQLStatementSync.cpp
r64313 r64334 62 62 int result = statement.prepare(); 63 63 if (result != SQLResultOk) { 64 ec = (result == SQLResultInterrupt ? SQLException::DATABASE_ERR : SQLException::SYNTAX_ERR);64 ec = SQLException::SYNTAX_ERR; 65 65 return 0; 66 66 } 67 67 68 68 if (statement.bindParameterCount() != m_arguments.size()) { 69 ec = (db->isInterrupted()? SQLException::DATABASE_ERR : SQLException::SYNTAX_ERR);69 ec = SQLException::SYNTAX_ERR; 70 70 return 0; 71 71 } -
trunk/WebCore/storage/SQLTransaction.cpp
r64313 r64334 147 147 #endif 148 148 149 void SQLTransaction::checkAndHandleClosed OrInterruptedDatabase()150 { 151 if (m_database->opened() && !m_database->isInterrupted())149 void SQLTransaction::checkAndHandleClosedDatabase() 150 { 151 if (m_database->opened()) 152 152 return; 153 153 154 154 // If the database was stopped, don't do anything and cancel queued work 155 LOG(StorageAPI, "Database was stopped or interrupted- cancelling work for this transaction");155 LOG(StorageAPI, "Database was stopped - cancelling work for this transaction"); 156 156 MutexLocker locker(m_statementMutex); 157 157 m_statementQueue.clear(); 158 158 m_nextStep = 0; 159 160 // Release the unneeded callbacks, to break reference cycles.161 m_callback = 0;162 m_successCallback = 0;163 m_errorCallback = 0;164 159 165 160 // The next steps should be executed only if we're on the DB thread. … … 189 184 m_nextStep == &SQLTransaction::cleanupAfterTransactionErrorCallback); 190 185 191 checkAndHandleClosed OrInterruptedDatabase();186 checkAndHandleClosedDatabase(); 192 187 193 188 if (m_nextStep) … … 208 203 m_nextStep == &SQLTransaction::deliverSuccessCallback); 209 204 210 checkAndHandleClosed OrInterruptedDatabase();205 checkAndHandleClosedDatabase(); 211 206 212 207 if (m_nextStep) … … 298 293 shouldDeliverErrorCallback = !m_callback->handleEvent(m_database->scriptExecutionContext(), this); 299 294 m_executeSqlAllowed = false; 300 m_callback = 0;301 295 } 302 296 … … 466 460 // If the commit failed, the transaction will still be marked as "in progress" 467 461 if (m_sqliteTransaction->inProgress()) { 468 m_successCallback = 0;469 462 m_transactionError = SQLError::create(SQLError::DATABASE_ERR, "failed to commit the transaction"); 470 463 handleTransactionError(false); … … 481 474 482 475 // Now release our unneeded callbacks, to break reference cycles. 476 m_callback = 0; 483 477 m_errorCallback = 0; 484 478 … … 553 547 // Transaction Step 12 - If exists, invoke error callback with the last 554 548 // error to have occurred in this transaction. 555 if (m_errorCallback) {549 if (m_errorCallback) 556 550 m_errorCallback->handleEvent(m_database->scriptExecutionContext(), m_transactionError.get()); 557 m_errorCallback = 0;558 }559 551 560 552 m_nextStep = &SQLTransaction::cleanupAfterTransactionErrorCallback; … … 588 580 m_nextStep = 0; 589 581 582 // Now release our callbacks, to break reference cycles. 583 m_callback = 0; 584 m_errorCallback = 0; 585 590 586 // Now release the lock on this database 591 587 m_database->transactionCoordinator()->releaseLock(this); -
trunk/WebCore/storage/SQLTransaction.h
r64313 r64334 88 88 void enqueueStatement(PassRefPtr<SQLStatement>); 89 89 90 void checkAndHandleClosed OrInterruptedDatabase();90 void checkAndHandleClosedDatabase(); 91 91 92 92 void acquireLock(); -
trunk/WebCore/storage/chromium/DatabaseTrackerChromium.cpp
r64313 r64334 175 175 } 176 176 177 void DatabaseTracker::interruptAllDatabasesForContext(const ScriptExecutionContext* context)178 {179 Vector<RefPtr<AbstractDatabase> > openDatabases;180 {181 MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);182 183 if (!m_openDatabaseMap)184 return;185 186 DatabaseNameMap* nameMap = m_openDatabaseMap->get(context->securityOrigin());187 if (!nameMap)188 return;189 190 DatabaseNameMap::const_iterator dbNameMapEndIt = nameMap->end();191 for (DatabaseNameMap::const_iterator dbNameMapIt = nameMap->begin(); dbNameMapIt != dbNameMapEndIt; ++dbNameMapIt) {192 DatabaseSet* databaseSet = dbNameMapIt->second;193 DatabaseSet::const_iterator dbSetEndIt = databaseSet->end();194 for (DatabaseSet::const_iterator dbSetIt = databaseSet->begin(); dbSetIt != dbSetEndIt; ++dbSetIt) {195 if ((*dbSetIt)->scriptExecutionContext() == context)196 openDatabases.append(*dbSetIt);197 }198 }199 }200 201 Vector<RefPtr<AbstractDatabase> >::const_iterator openDatabasesEndIt = openDatabases.end();202 for (Vector<RefPtr<AbstractDatabase> >::const_iterator openDatabasesIt = openDatabases.begin(); openDatabasesIt != openDatabasesEndIt; ++openDatabasesIt)203 (*openDatabasesIt)->interrupt();204 }205 206 177 } 207 178 -
trunk/WebCore/workers/WorkerThread.cpp
r64313 r64334 31 31 #include "WorkerThread.h" 32 32 33 #include "DatabaseTask.h" 33 34 #include "DedicatedWorkerContext.h" 34 35 #include "KURL.h" … … 41 42 #include <wtf/Noncopyable.h> 42 43 43 #if ENABLE(DATABASE)44 #include "DatabaseTask.h"45 #include "DatabaseTracker.h"46 #endif47 48 44 namespace WebCore { 49 45 … … 230 226 m_workerContext->script()->forbidExecution(WorkerScriptController::TerminateRunningScript); 231 227 232 #if ENABLE(DATABASE)233 DatabaseTracker::tracker().interruptAllDatabasesForContext(m_workerContext.get());234 #endif235 236 228 // FIXME: Rudely killing the thread won't work when we allow nested workers, because they will try to post notifications of their destruction. 237 229 // This can likely use the same mechanism as used for databases above.
Note: See TracChangeset
for help on using the changeset viewer.