Changeset 81999 in webkit
- Timestamp:
- Mar 25, 2011 4:01:00 PM (13 years ago)
- Location:
- trunk/Source/WebKit/chromium
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/chromium/ChangeLog
r81987 r81999 1 2011-03-25 Kinuko Yasuda <kinuko@chromium.org> 2 3 Reviewed by David Levin. 4 5 Data race between ~WorkerFileSystemCallbacksBridge and runTasksOnWorkerThread 6 https://bugs.webkit.org/show_bug.cgi?id=56138 7 Stopped passing the WorkerFileSystemCallbacksBridge's reference to 8 MainThreadFileSystemCallbacks so that in most cases (in normal cases) 9 its reference is only maintained by WorkerThread. 10 11 * src/WorkerFileSystemCallbacksBridge.cpp: 12 (WebKit::MainThreadFileSystemCallbacks::createLeakedPtr): 13 (WebKit::MainThreadFileSystemCallbacks::MainThreadFileSystemCallbacks): 14 (WebKit::WorkerFileSystemCallbacksBridge::mayPostTaskToWorker): 15 * src/WorkerFileSystemCallbacksBridge.h: 16 1 17 2011-03-24 John Abd-El-Malek <jam@chromium.org> 2 18 -
trunk/Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp
r81640 r81999 87 87 public: 88 88 // Callbacks are self-destructed and we always return leaked pointer here. 89 static MainThreadFileSystemCallbacks* createLeakedPtr( PassRefPtr<WorkerFileSystemCallbacksBridge>bridge, const String& mode)89 static MainThreadFileSystemCallbacks* createLeakedPtr(WorkerFileSystemCallbacksBridge* bridge, const String& mode) 90 90 { 91 91 OwnPtr<MainThreadFileSystemCallbacks> callbacks = adoptPtr(new MainThreadFileSystemCallbacks(bridge, mode)); … … 128 128 129 129 private: 130 MainThreadFileSystemCallbacks( PassRefPtr<WorkerFileSystemCallbacksBridge>bridge, const String& mode)130 MainThreadFileSystemCallbacks(WorkerFileSystemCallbacksBridge* bridge, const String& mode) 131 131 : m_bridge(bridge) 132 132 , m_mode(mode) 133 133 { 134 ASSERT(m_bridge .get());134 ASSERT(m_bridge); 135 135 } 136 136 137 137 friend class WorkerFileSystemCallbacksBridge; 138 RefPtr<WorkerFileSystemCallbacksBridge> m_bridge; 138 // The bridge pointer is kept by the bridge itself on the WorkerThread. 139 WorkerFileSystemCallbacksBridge* m_bridge; 139 140 const String m_mode; 140 141 }; … … 382 383 { 383 384 ASSERT(isMainThread()); 384 { // Let go of the mutex before possibly deleting this due to m_selfRef.clear(). 385 MutexLocker locker(m_mutex); 386 if (m_worker) 387 m_worker->postTaskForModeToWorkerContext(createCallbackTask(&runTaskOnWorkerThread, m_selfRef, task), mode); 388 } 389 m_selfRef.clear(); 385 MutexLocker locker(m_mutex); 386 if (m_worker) 387 m_worker->postTaskForModeToWorkerContext(createCallbackTask(&runTaskOnWorkerThread, m_selfRef.release(), task), mode); 390 388 } 391 389 -
trunk/Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.h
r81640 r81999 139 139 void mayPostTaskToWorker(PassOwnPtr<WebCore::ScriptExecutionContext::Task>, const String& mode); 140 140 141 // m_selfRef keeps a reference to itself until a task is created for the worker thread (at which point the task holds the reference).141 // m_selfRef keeps a reference to itself while there's a pending callback on the main thread. 142 142 RefPtr<WorkerFileSystemCallbacksBridge> m_selfRef; 143 143
Note: See TracChangeset
for help on using the changeset viewer.