Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Side by Side Diff: Source/modules/webdatabase/Database.cpp

Issue 593423002: Revert of DatabaseBackend should not post a task to an already terminated database thread (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | Source/modules/webdatabase/DatabaseContext.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Apple Inc. All rights reserved. 2 * Copyright (C) 2013 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 { 252 {
253 visitor->trace(m_databaseContext); 253 visitor->trace(m_databaseContext);
254 visitor->trace(m_sqliteDatabase); 254 visitor->trace(m_sqliteDatabase);
255 visitor->trace(m_databaseAuthorizer); 255 visitor->trace(m_databaseAuthorizer);
256 visitor->trace(m_transactionQueue); 256 visitor->trace(m_transactionQueue);
257 } 257 }
258 258
259 bool Database::openAndVerifyVersion(bool setVersionInNewDatabase, DatabaseError& error, String& errorMessage) 259 bool Database::openAndVerifyVersion(bool setVersionInNewDatabase, DatabaseError& error, String& errorMessage)
260 { 260 {
261 TaskSynchronizer synchronizer; 261 TaskSynchronizer synchronizer;
262 if (!databaseContext()->databaseThreadAvailable()) 262 if (!databaseContext()->databaseThread() || databaseContext()->databaseThrea d()->terminationRequested(&synchronizer))
263 return false; 263 return false;
264 264
265 DatabaseTracker::tracker().prepareToOpenDatabase(this); 265 DatabaseTracker::tracker().prepareToOpenDatabase(this);
266 bool success = false; 266 bool success = false;
267 OwnPtr<DatabaseOpenTask> task = DatabaseOpenTask::create(this, setVersionInN ewDatabase, &synchronizer, error, errorMessage, success); 267 OwnPtr<DatabaseOpenTask> task = DatabaseOpenTask::create(this, setVersionInN ewDatabase, &synchronizer, error, errorMessage, success);
268 databaseContext()->databaseThread()->scheduleTask(task.release()); 268 databaseContext()->databaseThread()->scheduleTask(task.release());
269 synchronizer.waitForTaskCompletion(); 269 synchronizer.waitForTaskCompletion();
270 270
271 return success; 271 return success;
272 } 272 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 } 323 }
324 324
325 void Database::scheduleTransaction() 325 void Database::scheduleTransaction()
326 { 326 {
327 ASSERT(!m_transactionInProgressMutex.tryLock()); // Locked by caller. 327 ASSERT(!m_transactionInProgressMutex.tryLock()); // Locked by caller.
328 RefPtrWillBeRawPtr<SQLTransactionBackend> transaction = nullptr; 328 RefPtrWillBeRawPtr<SQLTransactionBackend> transaction = nullptr;
329 329
330 if (m_isTransactionQueueEnabled && !m_transactionQueue.isEmpty()) 330 if (m_isTransactionQueueEnabled && !m_transactionQueue.isEmpty())
331 transaction = m_transactionQueue.takeFirst(); 331 transaction = m_transactionQueue.takeFirst();
332 332
333 if (transaction && databaseContext()->databaseThreadAvailable()) { 333 if (transaction && databaseContext()->databaseThread()) {
334 OwnPtr<DatabaseTransactionTask> task = DatabaseTransactionTask::create(t ransaction); 334 OwnPtr<DatabaseTransactionTask> task = DatabaseTransactionTask::create(t ransaction);
335 WTF_LOG(StorageAPI, "Scheduling DatabaseTransactionTask %p for transacti on %p\n", task.get(), task->transaction()); 335 WTF_LOG(StorageAPI, "Scheduling DatabaseTransactionTask %p for transacti on %p\n", task.get(), task->transaction());
336 m_transactionInProgress = true; 336 m_transactionInProgress = true;
337 databaseContext()->databaseThread()->scheduleTask(task.release()); 337 databaseContext()->databaseThread()->scheduleTask(task.release());
338 } else { 338 } else {
339 m_transactionInProgress = false; 339 m_transactionInProgress = false;
340 } 340 }
341 } 341 }
342 342
343 void Database::scheduleTransactionStep(SQLTransactionBackend* transaction) 343 void Database::scheduleTransactionStep(SQLTransactionBackend* transaction)
344 { 344 {
345 if (!databaseContext()->databaseThreadAvailable()) 345 if (!databaseContext()->databaseThread())
346 return; 346 return;
347 347
348 OwnPtr<DatabaseTransactionTask> task = DatabaseTransactionTask::create(trans action); 348 OwnPtr<DatabaseTransactionTask> task = DatabaseTransactionTask::create(trans action);
349 WTF_LOG(StorageAPI, "Scheduling DatabaseTransactionTask %p for the transacti on step\n", task.get()); 349 WTF_LOG(StorageAPI, "Scheduling DatabaseTransactionTask %p for the transacti on step\n", task.get());
350 databaseContext()->databaseThread()->scheduleTask(task.release()); 350 databaseContext()->databaseThread()->scheduleTask(task.release());
351 } 351 }
352 352
353 SQLTransactionClient* Database::transactionClient() const 353 SQLTransactionClient* Database::transactionClient() const
354 { 354 {
355 return databaseContext()->databaseThread()->transactionClient(); 355 return databaseContext()->databaseThread()->transactionClient();
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 } 776 }
777 777
778 ExecutionContext* Database::executionContext() const 778 ExecutionContext* Database::executionContext() const
779 { 779 {
780 return databaseContext()->executionContext(); 780 return databaseContext()->executionContext();
781 } 781 }
782 782
783 void Database::closeImmediately() 783 void Database::closeImmediately()
784 { 784 {
785 ASSERT(executionContext()->isContextThread()); 785 ASSERT(executionContext()->isContextThread());
786 if (databaseContext()->databaseThreadAvailable() && opened()) { 786 DatabaseThread* databaseThread = databaseContext()->databaseThread();
787 if (databaseThread && !databaseThread->terminationRequested() && opened()) {
787 logErrorMessage("forcibly closing database"); 788 logErrorMessage("forcibly closing database");
788 databaseContext()->databaseThread()->scheduleTask(DatabaseCloseTask::cre ate(this, 0)); 789 databaseThread->scheduleTask(DatabaseCloseTask::create(this, 0));
789 } 790 }
790 } 791 }
791 792
792 void Database::changeVersion( 793 void Database::changeVersion(
793 const String& oldVersion, 794 const String& oldVersion,
794 const String& newVersion, 795 const String& newVersion,
795 PassOwnPtrWillBeRawPtr<SQLTransactionCallback> callback, 796 PassOwnPtrWillBeRawPtr<SQLTransactionCallback> callback,
796 PassOwnPtrWillBeRawPtr<SQLTransactionErrorCallback> errorCallback, 797 PassOwnPtrWillBeRawPtr<SQLTransactionErrorCallback> errorCallback,
797 PassOwnPtrWillBeRawPtr<VoidCallback> successCallback) 798 PassOwnPtrWillBeRawPtr<VoidCallback> successCallback)
798 { 799 {
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
905 return tableNames; 906 return tableNames;
906 } 907 }
907 908
908 Vector<String> Database::tableNames() 909 Vector<String> Database::tableNames()
909 { 910 {
910 // FIXME: Not using isolatedCopy on these strings looks ok since threads 911 // FIXME: Not using isolatedCopy on these strings looks ok since threads
911 // take strict turns in dealing with them. However, if the code changes, 912 // take strict turns in dealing with them. However, if the code changes,
912 // this may not be true anymore. 913 // this may not be true anymore.
913 Vector<String> result; 914 Vector<String> result;
914 TaskSynchronizer synchronizer; 915 TaskSynchronizer synchronizer;
915 if (!databaseContext()->databaseThreadAvailable()) 916 if (!databaseContext()->databaseThread() || databaseContext()->databaseThrea d()->terminationRequested(&synchronizer))
916 return result; 917 return result;
917 918
918 OwnPtr<DatabaseTableNamesTask> task = DatabaseTableNamesTask::create(this, & synchronizer, result); 919 OwnPtr<DatabaseTableNamesTask> task = DatabaseTableNamesTask::create(this, & synchronizer, result);
919 databaseContext()->databaseThread()->scheduleTask(task.release()); 920 databaseContext()->databaseThread()->scheduleTask(task.release());
920 synchronizer.waitForTaskCompletion(); 921 synchronizer.waitForTaskCompletion();
921 922
922 return result; 923 return result;
923 } 924 }
924 925
925 SecurityOrigin* Database::securityOrigin() const 926 SecurityOrigin* Database::securityOrigin() const
926 { 927 {
927 if (executionContext()->isContextThread()) 928 if (executionContext()->isContextThread())
928 return m_contextThreadSecurityOrigin.get(); 929 return m_contextThreadSecurityOrigin.get();
929 if (databaseContext()->databaseThread()->isDatabaseThread()) 930 if (databaseContext()->databaseThread()->isDatabaseThread())
930 return m_databaseThreadSecurityOrigin.get(); 931 return m_databaseThreadSecurityOrigin.get();
931 return 0; 932 return 0;
932 } 933 }
933 934
934 } // namespace blink 935 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | Source/modules/webdatabase/DatabaseContext.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698