From 27e908b301f1fe34aa479a6b14c46379841f3029 Mon Sep 17 00:00:00 2001 From: "thakis@chromium.org" Date: Tue, 21 Aug 2012 22:53:54 +0000 Subject: mac/rlz: Remove an incorrect check As a comment in the ScopedRlzValueStoreLock destructor explains: // Check that "store_ set" => "file_lock acquired". The converse isn't true, // for example if the rlz data file can't be read. So don't CHECK when that happens, instead treat it like lock acquisition failures: Silently drop events when that happens. I added a unit test for this scenario. Also pass O_RDWR to open(), as posix requires one of O_READ, O_WRITE, or O_RDWR. BUG=143950 Review URL: https://chromiumcodereview.appspot.com/10828424 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@152659 0039d316-1c4b-4281-b951-d872f2087c98 --- rlz/mac/lib/rlz_value_store_mac.mm | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'rlz/mac') diff --git a/rlz/mac/lib/rlz_value_store_mac.mm b/rlz/mac/lib/rlz_value_store_mac.mm index b1d082d..795a0cc 100644 --- a/rlz/mac/lib/rlz_value_store_mac.mm +++ b/rlz/mac/lib/rlz_value_store_mac.mm @@ -270,7 +270,9 @@ bool RecursiveCrossProcessLock::TryGetCrossProcessLock( const int kSleepPerTryMS = 200; CHECK(file_lock_ == -1); - file_lock_ = open([lock_filename fileSystemRepresentation], O_CREAT, 0666); + file_lock_ = open([lock_filename fileSystemRepresentation], + O_RDWR | O_CREAT, + 0666); if (file_lock_ == -1) return false; @@ -354,8 +356,8 @@ NSString* RlzPlistFilename() { // Returns the path of the rlz lock file, also creates the parent directory // path if it doesn't exist. NSString* RlzLockFilename() { - NSString* const kRlzFile = @"flockfile"; - return [CreateRlzDirectory() stringByAppendingPathComponent:kRlzFile]; + NSString* const kRlzLockfile = @"flockfile"; + return [CreateRlzDirectory() stringByAppendingPathComponent:kRlzLockfile]; } } // namespace @@ -377,8 +379,8 @@ ScopedRlzValueStoreLock::ScopedRlzValueStoreLock() { } if (g_lock_depth > 1) { - // Reuse the already existing store object. - CHECK(g_store_object); + // Reuse the already existing store object. Note that it can be NULL when + // lock acquisition succeeded but the rlz data file couldn't be read. store_.reset(g_store_object); return; } @@ -449,6 +451,12 @@ void SetRlzStoreDirectory(const FilePath& directory) { } } +std::string RlzPlistFilenameStr() { + @autoreleasepool { + return std::string([RlzPlistFilename() fileSystemRepresentation]); + } +} + } // namespace testing } // namespace rlz_lib -- cgit v1.1