summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sync/syncable
diff options
context:
space:
mode:
authortimsteele@google.com <timsteele@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-07 18:42:35 +0000
committertimsteele@google.com <timsteele@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-07 18:42:35 +0000
commitde32e5eec767c4472d708488f98619c7bc2f7227 (patch)
treed295030fbf6f1fe43dfed00a88ad68d909129429 /chrome/browser/sync/syncable
parent9424883141ce8f7c1052827f519f001c89a47213 (diff)
downloadchromium_src-de32e5eec767c4472d708488f98619c7bc2f7227.zip
chromium_src-de32e5eec767c4472d708488f98619c7bc2f7227.tar.gz
chromium_src-de32e5eec767c4472d708488f98619c7bc2f7227.tar.bz2
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
Diffstat (limited to 'chrome/browser/sync/syncable')
-rw-r--r--chrome/browser/sync/syncable/directory_manager.cc53
-rw-r--r--chrome/browser/sync/syncable/directory_manager.h10
-rw-r--r--chrome/browser/sync/syncable/syncable_unittest.cc3
3 files changed, 25 insertions, 41 deletions
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<Directory*>(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 <pthread.h>
-
#include <vector>
#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:
{