From fb2622f6816ed20ffd8a35994f7372b67613ba92 Mon Sep 17 00:00:00 2001 From: "rvargas@google.com" Date: Tue, 13 Jul 2010 18:00:56 +0000 Subject: Disk cache: Switch the disk cache to use the cache_thread. Add an InFlightBackendIO class that handles posting of cacheoperations back and forth between the IO thread and the cachethread. BUG=26730 TEST=unit tests Review URL: http://codereview.chromium.org/2945002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@52185 0039d316-1c4b-4281-b951-d872f2087c98 --- net/disk_cache/file_posix.cc | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'net/disk_cache/file_posix.cc') diff --git a/net/disk_cache/file_posix.cc b/net/disk_cache/file_posix.cc index cf621f4..295f744 100644 --- a/net/disk_cache/file_posix.cc +++ b/net/disk_cache/file_posix.cc @@ -193,6 +193,9 @@ void InFlightIO::PostRead(disk_cache::File *file, void* buf, size_t buf_len, io_list_.insert(operation.get()); file->AddRef(); // Balanced on InvokeCallback() + if (!callback_thread_) + callback_thread_ = MessageLoop::current(); + WorkerPool::PostTask(FROM_HERE, NewRunnableMethod(operation.get(), &BackgroundIO::Read), true); @@ -207,6 +210,9 @@ void InFlightIO::PostWrite(disk_cache::File* file, const void* buf, io_list_.insert(operation.get()); file->AddRef(); // Balanced on InvokeCallback() + if (!callback_thread_) + callback_thread_ = MessageLoop::current(); + WorkerPool::PostTask(FROM_HERE, NewRunnableMethod(operation.get(), &BackgroundIO::Write, delete_buffer), @@ -219,6 +225,8 @@ void InFlightIO::WaitForPendingIO() { IOList::iterator it = io_list_.begin(); InvokeCallback(*it, true); } + // Unit tests can use different threads. + callback_thread_ = NULL; } // Runs on a worker thread. @@ -372,8 +380,9 @@ size_t File::GetLength() { // Static. void File::WaitForPendingIO(int* num_pending_io) { - if (*num_pending_io) - Singleton::get()->WaitForPendingIO(); + // We may be running unit tests so we should allow InFlightIO to reset the + // message loop. + Singleton::get()->WaitForPendingIO(); } } // namespace disk_cache -- cgit v1.1