From de32e5eec767c4472d708488f98619c7bc2f7227 Mon Sep 17 00:00:00 2001 From: "timsteele@google.com" Date: Wed, 7 Oct 2009 18:42:35 +0000 Subject: Sync: Replace pthread mutex with base::Lock in a few more places. This leaves just ServerConnectionManager behind. BUG=19895 TEST=sync_unit_tests Review URL: http://codereview.chromium.org/251098 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@28278 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/browser/sync/syncable/directory_manager.cc | 53 +++++++++-------------- chrome/browser/sync/syncable/directory_manager.h | 10 ++--- chrome/browser/sync/syncable/syncable_unittest.cc | 3 +- 3 files changed, 25 insertions(+), 41 deletions(-) (limited to 'chrome/browser/sync/syncable') diff --git a/chrome/browser/sync/syncable/directory_manager.cc b/chrome/browser/sync/syncable/directory_manager.cc index 4ce70ff..edce2e27c 100644 --- a/chrome/browser/sync/syncable/directory_manager.cc +++ b/chrome/browser/sync/syncable/directory_manager.cc @@ -39,16 +39,13 @@ DirectoryManager::DirectoryManager(const PathString& path) : root_path_(AppendSlash(path)), managed_directory_(NULL), channel_(new Channel(DirectoryManagerShutdownEvent())) { - CHECK(0 == pthread_mutex_init(&mutex_, NULL)); } DirectoryManager::~DirectoryManager() { + AutoLock lock(lock_); DCHECK_EQ(managed_directory_, static_cast(NULL)) << "Dir " << managed_directory_->name() << " not closed!"; - pthread_mutex_lock(&mutex_); delete channel_; - pthread_mutex_unlock(&mutex_); - CHECK(0 == pthread_mutex_destroy(&mutex_)); } bool DirectoryManager::Open(const PathString& name) { @@ -73,15 +70,17 @@ bool DirectoryManager::Open(const PathString& name) { DirOpenResult DirectoryManager::OpenImpl(const PathString& name, const PathString& path, bool* was_open) { - pthread_mutex_lock(&mutex_); - // Check to see if it's already open. bool opened = false; - if (managed_directory_) { - DCHECK_EQ(ComparePathNames(name, managed_directory_->name()), 0) - << "Can't open more than one directory."; - opened = *was_open = true; + { + AutoLock lock(lock_); + // Check to see if it's already open. + if (managed_directory_) { + DCHECK_EQ(ComparePathNames(name, managed_directory_->name()), 0) + << "Can't open more than one directory."; + opened = *was_open = true; + } } - pthread_mutex_unlock(&mutex_); + if (opened) return syncable::OPENED; // Otherwise, open it. @@ -89,9 +88,8 @@ DirOpenResult DirectoryManager::OpenImpl(const PathString& name, Directory* dir = new Directory; const DirOpenResult result = dir->Open(path, name); if (syncable::OPENED == result) { - pthread_mutex_lock(&mutex_); + AutoLock lock(lock_); managed_directory_ = dir; - pthread_mutex_unlock(&mutex_); } else { delete dir; } @@ -102,16 +100,16 @@ DirOpenResult DirectoryManager::OpenImpl(const PathString& name, // handles and resources are freed by other threads. void DirectoryManager::Close(const PathString& name) { // Erase from mounted and opened directory lists. - pthread_mutex_lock(&mutex_); - - if (!managed_directory_ || - ComparePathNames(name, managed_directory_->name()) != 0) { - // It wasn't open; - pthread_mutex_unlock(&mutex_); - return; + { + AutoLock lock(lock_); + if (!managed_directory_ || + ComparePathNames(name, managed_directory_->name()) != 0) { + // It wasn't open. + return; + } } - pthread_mutex_unlock(&mutex_); + // TODO(timsteele): No lock?! // Notify listeners. managed_directory_->channel()->NotifyListeners(DIRECTORY_CLOSED); DirectoryManagerEvent event = { DirectoryManagerEvent::CLOSED, name }; @@ -121,26 +119,17 @@ void DirectoryManager::Close(const PathString& name) { managed_directory_ = NULL; } -// Marks all directories as closed. It might take a while until all the file -// handles and resources are freed by other threads. -void DirectoryManager::CloseAllDirectories() { - if (managed_directory_) - Close(managed_directory_->name()); -} - void DirectoryManager::FinalSaveChangesForAll() { - pthread_mutex_lock(&mutex_); + AutoLock lock(lock_); if (managed_directory_) managed_directory_->SaveChanges(); - pthread_mutex_unlock(&mutex_); } void DirectoryManager::GetOpenDirectories(DirNames* result) { result->clear(); - pthread_mutex_lock(&mutex_); + AutoLock lock(lock_); if (managed_directory_) result->push_back(managed_directory_->name()); - pthread_mutex_unlock(&mutex_); } ScopedDirLookup::ScopedDirLookup(DirectoryManager* dirman, diff --git a/chrome/browser/sync/syncable/directory_manager.h b/chrome/browser/sync/syncable/directory_manager.h index 197b46b..f059257 100644 --- a/chrome/browser/sync/syncable/directory_manager.h +++ b/chrome/browser/sync/syncable/directory_manager.h @@ -12,11 +12,10 @@ #ifndef CHROME_BROWSER_SYNC_SYNCABLE_DIRECTORY_MANAGER_H_ #define CHROME_BROWSER_SYNC_SYNCABLE_DIRECTORY_MANAGER_H_ -#include - #include #include "base/atomicops.h" +#include "base/lock.h" #include "base/basictypes.h" #include "chrome/browser/sync/syncable/dir_open_result.h" #include "chrome/browser/sync/syncable/path_name_cmp.h" @@ -66,10 +65,6 @@ class DirectoryManager { // file handles and resources are freed by other threads. void Close(const PathString& name); - // Marks all directories as closed. It might take a while until all the - // file handles and resources are freed by other threads. - void CloseAllDirectories(); - // Should be called at App exit. void FinalSaveChangesForAll(); @@ -87,8 +82,9 @@ class DirectoryManager { friend class ScopedDirLookup; const PathString root_path_; + // protects managed_directory_ - mutable pthread_mutex_t mutex_; + Lock lock_; Directory* managed_directory_; Channel* const channel_; diff --git a/chrome/browser/sync/syncable/syncable_unittest.cc b/chrome/browser/sync/syncable/syncable_unittest.cc index 41ad4d5..e271ade 100644 --- a/chrome/browser/sync/syncable/syncable_unittest.cc +++ b/chrome/browser/sync/syncable/syncable_unittest.cc @@ -40,7 +40,6 @@ #include "chrome/browser/sync/util/compat_file.h" #include "chrome/browser/sync/util/event_sys-inl.h" #include "chrome/browser/sync/util/path_helpers.h" -#include "chrome/browser/sync/util/pthread_helpers.h" #include "chrome/browser/sync/util/query_helpers.h" #include "chrome/test/sync/engine/test_id_factory.h" #include "testing/gtest/include/gtest/gtest.h" @@ -921,7 +920,7 @@ namespace DirectoryKernelStalenessBug { CHECK(dir.good()); dir->SaveChanges(); } - dirman->CloseAllDirectories(); + dirman->Close(dirname); break; case 1: { -- cgit v1.1