Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(272)

Side by Side Diff: chromecast/crash/linux/synchronized_minidump_manager.h

Issue 2203123003: [Chromecast] Remove usage of nonreentrant functions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Cleanup Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROMECAST_CRASH_LINUX_SYNCHRONIZED_MINIDUMP_MANAGER_H_ 5 #ifndef CHROMECAST_CRASH_LINUX_SYNCHRONIZED_MINIDUMP_MANAGER_H_
6 #define CHROMECAST_CRASH_LINUX_SYNCHRONIZED_MINIDUMP_MANAGER_H_ 6 #define CHROMECAST_CRASH_LINUX_SYNCHRONIZED_MINIDUMP_MANAGER_H_
7 7
8 #include <time.h> 8 #include <time.h>
9 9
10 #include <string> 10 #include <string>
11 11
12 #include "base/files/file.h"
12 #include "base/files/file_path.h" 13 #include "base/files/file_path.h"
13 #include "base/macros.h" 14 #include "base/macros.h"
14 #include "base/memory/scoped_vector.h" 15 #include "base/memory/scoped_vector.h"
15 #include "base/values.h" 16 #include "base/values.h"
16 #include "chromecast/crash/linux/dump_info.h" 17 #include "chromecast/crash/linux/dump_info.h"
17 18
18 namespace chromecast { 19 namespace chromecast {
19 20
20 // Abstract base class for mutually-exclusive minidump handling. Ensures 21 // Abstract base class for mutually-exclusive minidump handling. Ensures
21 // synchronized access among instances of this class to the minidumps directory 22 // synchronized access among instances of this class to the minidumps directory
(...skipping 25 matching lines...) Expand all
47 class SynchronizedMinidumpManager { 48 class SynchronizedMinidumpManager {
48 public: 49 public:
49 // Length of a ratelimit period in seconds. 50 // Length of a ratelimit period in seconds.
50 static const int kRatelimitPeriodSeconds; 51 static const int kRatelimitPeriodSeconds;
51 52
52 // Number of dumps allowed per period. 53 // Number of dumps allowed per period.
53 static const int kRatelimitPeriodMaxDumps; 54 static const int kRatelimitPeriodMaxDumps;
54 55
55 virtual ~SynchronizedMinidumpManager(); 56 virtual ~SynchronizedMinidumpManager();
56 57
57 // Returns whether this object's file locking method is nonblocking or not.
58 bool non_blocking() { return non_blocking_; }
59
60 // Sets the file locking mechansim to be nonblocking or not.
61 void set_non_blocking(bool non_blocking) { non_blocking_ = non_blocking; }
62
63 protected: 58 protected:
64 SynchronizedMinidumpManager(); 59 SynchronizedMinidumpManager();
65 60
66 // Acquires the lock, calls DoWork(), then releases the lock when DoWork() 61 // Acquires the lock, calls DoWork(), then releases the lock when DoWork()
67 // returns. Derived classes should expose a method which calls this. Returns 62 // returns. Derived classes should expose a method which calls this. Returns
68 // the status of DoWork(), or -1 if the lock was not successfully acquired. 63 // the status of DoWork(), or -1 if the lock was not successfully acquired.
69 int AcquireLockAndDoWork(); 64 int AcquireLockAndDoWork();
bcf 2016/08/05 03:33:23 Lets change all the the error codes to bool to be
ameyak 2016/08/05 18:45:06 Done.
70 65
71 // Derived classes must implement this method. It will be called from 66 // Derived classes must implement this method. It will be called from
72 // DoWorkLocked after the lock has been successfully acquired. The lockfile 67 // DoWorkLocked after the lock has been successfully acquired. The lockfile
73 // shall be accessed and mutated only through the methods below. All other 68 // shall be accessed and mutated only through the methods below. All other
74 // files shall be managed as needed by the derived class. 69 // files shall be managed as needed by the derived class.
75 virtual int DoWork() = 0; 70 virtual int DoWork() = 0;
bcf 2016/08/05 03:33:23 In this case, I don't think its good design to hav
ameyak 2016/08/05 18:45:06 Done.
76 71
77 // Get the current dumps in the lockfile. 72 // Get the current dumps in the lockfile.
78 ScopedVector<DumpInfo> GetDumps(); 73 ScopedVector<DumpInfo> GetDumps();
79 74
80 // Set |dumps| as the dumps in |lockfile_|, replacing current list of dumps. 75 // Set |dumps| as the dumps in |lockfile_|, replacing current list of dumps.
81 int SetCurrentDumps(const ScopedVector<DumpInfo>& dumps); 76 int SetCurrentDumps(const ScopedVector<DumpInfo>& dumps);
82 77
83 // Serialize |dump_info| and append it to the lockfile. Note that the child 78 // Serialize |dump_info| and append it to the lockfile. Note that the child
84 // class must only call this inside DoWork(). This should be the only method 79 // class must only call this inside DoWork(). This should be the only method
85 // used to write to the lockfile. Only call this if the minidump has been 80 // used to write to the lockfile. Only call this if the minidump has been
(...skipping 18 matching lines...) Expand all
104 // Returns true when dumps uploaded in current rate limit period is less than 99 // Returns true when dumps uploaded in current rate limit period is less than
105 // |kRatelimitPeriodMaxDumps|. Resets rate limit period if period time has 100 // |kRatelimitPeriodMaxDumps|. Resets rate limit period if period time has
106 // elapsed. 101 // elapsed.
107 bool CanUploadDump(); 102 bool CanUploadDump();
108 103
109 // Returns true when there are dumps in the lockfile or extra files in the 104 // Returns true when there are dumps in the lockfile or extra files in the
110 // dump directory, false otherwise. 105 // dump directory, false otherwise.
111 // Used to avoid unnecessary file locks in consumers. 106 // Used to avoid unnecessary file locks in consumers.
112 bool HasDumps(); 107 bool HasDumps();
113 108
114 // If true, the flock on the lockfile will be nonblocking.
115 bool non_blocking_;
116
117 // Cached path for the minidumps directory. 109 // Cached path for the minidumps directory.
118 const base::FilePath dump_path_; 110 const base::FilePath dump_path_;
119 111
120 private: 112 private:
121 // Acquire the lock file. Blocks if another process holds it, or if called 113 // Acquire the lock file. Blocks if another process holds it, or if called
122 // a second time by the same process. Returns the fd of the lockfile if 114 // a second time by the same process. Returns the fd of the lockfile if
123 // successful, or -1 if failed. 115 // successful, or -1 if failed.
124 int AcquireLockFile(); 116 int AcquireLockFile();
125 117
126 // Parse the lockfile and metadata file, populating |dumps_| and |metadata_| 118 // Parse the lockfile and metadata file, populating |dumps_| and |metadata_|
127 // for modifier functions to use. Return -1 if an error occurred. Otherwise, 119 // for modifier functions to use. Return -1 if an error occurred. Otherwise,
128 // return 0. This must not be called unless |this| has acquired the lock. 120 // return 0. This must not be called unless |this| has acquired the lock.
129 int ParseFiles(); 121 int ParseFiles();
130 122
131 // Write deserialized |dumps| to |lockfile_path_| and the deserialized 123 // Write deserialized |dumps| to |lockfile_path_| and the deserialized
132 // |metadata| to |metadata_path_|. 124 // |metadata| to |metadata_path_|.
133 int WriteFiles(const base::ListValue* dumps, const base::Value* metadata); 125 int WriteFiles(const base::ListValue* dumps, const base::Value* metadata);
134 126
135 // Creates an empty lock file and an initialized metadata file. 127 // Creates an empty lock file and an initialized metadata file.
136 int InitializeFiles(); 128 int InitializeFiles();
137 129
138 // Release the lock file with the associated *fd*. 130 // Release the lock file with the associated *fd*.
139 void ReleaseLockFile(); 131 void ReleaseLockFile();
140 132
141 const std::string lockfile_path_; 133 const base::FilePath lockfile_path_;
142 const std::string metadata_path_; 134 const base::FilePath metadata_path_;
143 int lockfile_fd_; 135 int lockfile_fd_;
144 std::unique_ptr<base::Value> metadata_; 136 std::unique_ptr<base::Value> metadata_;
145 std::unique_ptr<base::ListValue> dumps_; 137 std::unique_ptr<base::ListValue> dumps_;
146 138
147 DISALLOW_COPY_AND_ASSIGN(SynchronizedMinidumpManager); 139 DISALLOW_COPY_AND_ASSIGN(SynchronizedMinidumpManager);
148 }; 140 };
149 141
150 } // namespace chromecast 142 } // namespace chromecast
151 143
152 #endif // CHROMECAST_CRASH_LINUX_SYNCHRONIZED_MINIDUMP_MANAGER_H_ 144 #endif // CHROMECAST_CRASH_LINUX_SYNCHRONIZED_MINIDUMP_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698