@@ -189,11 +189,14 @@ inline FutureBase::CompletionCallbackHandle Future<ResultType>::AddOnCompletion(
189
189
190
190
#endif // defined(INTERNAL_EXPERIMENTAL)
191
191
192
- inline FutureBase::FutureBase () : api_(NULL ), handle_(0 ) {} // NOLINT
192
+ inline FutureBase::FutureBase ()
193
+ : mutex_(Mutex::Mode::kModeNonRecursive ),
194
+ api_(NULL ),
195
+ handle_(0 ) {} // NOLINT
193
196
194
197
inline FutureBase::FutureBase (detail::FutureApiInterface* api,
195
198
const FutureHandle& handle)
196
- : api_(api), handle_(handle) {
199
+ : mutex_(Mutex::Mode:: kModeNonRecursive ), api_(api), handle_(handle) {
197
200
api_->ReferenceFuture (handle_);
198
201
// Once the FutureBase has reference, we don't need extra handle reference.
199
202
handle_.Detach ();
@@ -203,7 +206,8 @@ inline FutureBase::FutureBase(detail::FutureApiInterface* api,
203
206
inline FutureBase::~FutureBase () { Release (); }
204
207
205
208
inline FutureBase::FutureBase (const FutureBase& rhs)
206
- : api_(NULL ) // NOLINT
209
+ : mutex_(Mutex::Mode::kModeNonRecursive ),
210
+ api_(NULL ) // NOLINT
207
211
{ // NOLINT
208
212
*this = rhs;
209
213
}
@@ -214,13 +218,13 @@ inline FutureBase& FutureBase::operator=(const FutureBase& rhs) {
214
218
detail::FutureApiInterface* new_api;
215
219
FutureHandle new_handle;
216
220
{
217
- std::lock_guard<std::mutex> lock (rhs.mutex_ );
221
+ MutexLock lock (rhs.mutex_ );
218
222
new_api = rhs.api_ ;
219
223
new_handle = rhs.handle_ ;
220
224
}
221
225
222
226
{
223
- std::lock_guard<std::mutex> lock (mutex_);
227
+ MutexLock lock (mutex_);
224
228
api_ = new_api;
225
229
handle_ = new_handle;
226
230
@@ -235,7 +239,8 @@ inline FutureBase& FutureBase::operator=(const FutureBase& rhs) {
235
239
236
240
#if defined(FIREBASE_USE_MOVE_OPERATORS)
237
241
inline FutureBase::FutureBase (FutureBase&& rhs) noexcept
238
- : api_(NULL ) // NOLINT
242
+ : mutex_(Mutex::Mode::kModeNonRecursive ),
243
+ api_(NULL ) // NOLINT
239
244
{
240
245
*this = std::move (rhs);
241
246
}
@@ -246,14 +251,14 @@ inline FutureBase& FutureBase::operator=(FutureBase&& rhs) noexcept {
246
251
detail::FutureApiInterface* new_api;
247
252
FutureHandle new_handle;
248
253
{
249
- std::lock_guard<std::mutex> lock (rhs.mutex_ );
254
+ MutexLock lock (rhs.mutex_ );
250
255
detail::UnregisterForCleanup (rhs.api_ , &rhs);
251
256
new_api = rhs.api_ ;
252
257
new_handle = rhs.handle_ ;
253
258
rhs.api_ = NULL ; // NOLINT
254
259
}
255
260
256
- std::lock_guard<std::mutex> lock (mutex_);
261
+ MutexLock lock (mutex_);
257
262
api_ = new_api;
258
263
handle_ = new_handle;
259
264
detail::RegisterForCleanup (api_, this );
@@ -262,7 +267,7 @@ inline FutureBase& FutureBase::operator=(FutureBase&& rhs) noexcept {
262
267
#endif // defined(FIREBASE_USE_MOVE_OPERATORS)
263
268
264
269
inline void FutureBase::Release () {
265
- std::lock_guard<std::mutex> lock (mutex_);
270
+ MutexLock lock (mutex_);
266
271
if (api_ != NULL ) { // NOLINT
267
272
detail::UnregisterForCleanup (api_, this );
268
273
api_->ReleaseFuture (handle_);
@@ -271,30 +276,30 @@ inline void FutureBase::Release() {
271
276
}
272
277
273
278
inline FutureStatus FutureBase::status () const {
274
- std::lock_guard<std::mutex> lock (mutex_);
279
+ MutexLock lock (mutex_);
275
280
return api_ == NULL ? // NOLINT
276
281
kFutureStatusInvalid
277
282
: api_->GetFutureStatus (handle_);
278
283
}
279
284
280
285
inline int FutureBase::error () const {
281
- std::lock_guard<std::mutex> lock (mutex_);
286
+ MutexLock lock (mutex_);
282
287
return api_ == NULL ? -1 : api_->GetFutureError (handle_); // NOLINT
283
288
}
284
289
285
290
inline const char * FutureBase::error_message () const {
286
- std::lock_guard<std::mutex> lock (mutex_);
291
+ MutexLock lock (mutex_);
287
292
return api_ == NULL ? NULL : api_->GetFutureErrorMessage (handle_); // NOLINT
288
293
}
289
294
290
295
inline const void * FutureBase::result_void () const {
291
- std::lock_guard<std::mutex> lock (mutex_);
296
+ MutexLock lock (mutex_);
292
297
return api_ == NULL ? NULL : api_->GetFutureResult (handle_); // NOLINT
293
298
}
294
299
295
300
inline void FutureBase::OnCompletion (CompletionCallback callback,
296
301
void * user_data) const {
297
- std::lock_guard<std::mutex> lock (mutex_);
302
+ MutexLock lock (mutex_);
298
303
if (api_ != NULL ) { // NOLINT
299
304
api_->AddCompletionCallback (handle_, callback, user_data, nullptr ,
300
305
/* clear_existing_callbacks=*/ true );
@@ -304,7 +309,7 @@ inline void FutureBase::OnCompletion(CompletionCallback callback,
304
309
#if defined(INTERNAL_EXPERIMENTAL)
305
310
inline FutureBase::CompletionCallbackHandle FutureBase::AddOnCompletion (
306
311
CompletionCallback callback, void * user_data) const {
307
- std::lock_guard<std::mutex> lock (mutex_);
312
+ MutexLock lock (mutex_);
308
313
if (api_ != NULL ) { // NOLINT
309
314
return api_->AddCompletionCallback (handle_, callback, user_data, nullptr ,
310
315
/* clear_existing_callbacks=*/ false );
@@ -314,7 +319,7 @@ inline FutureBase::CompletionCallbackHandle FutureBase::AddOnCompletion(
314
319
315
320
inline void FutureBase::RemoveOnCompletion (
316
321
CompletionCallbackHandle completion_handle) const {
317
- std::lock_guard<std::mutex> lock (mutex_);
322
+ MutexLock lock (mutex_);
318
323
if (api_ != NULL ) { // NOLINT
319
324
api_->RemoveCompletionCallback (handle_, completion_handle);
320
325
}
@@ -324,7 +329,7 @@ inline void FutureBase::RemoveOnCompletion(
324
329
#if defined(FIREBASE_USE_STD_FUNCTION)
325
330
inline void FutureBase::OnCompletion (
326
331
std::function<void (const FutureBase&)> callback) const {
327
- std::lock_guard<std::mutex> lock (mutex_);
332
+ MutexLock lock (mutex_);
328
333
if (api_ != NULL ) { // NOLINT
329
334
api_->AddCompletionCallbackLambda (handle_, callback,
330
335
/* clear_existing_callbacks=*/ true );
@@ -334,7 +339,7 @@ inline void FutureBase::OnCompletion(
334
339
#if defined(INTERNAL_EXPERIMENTAL)
335
340
inline FutureBase::CompletionCallbackHandle FutureBase::AddOnCompletion (
336
341
std::function<void (const FutureBase&)> callback) const {
337
- std::lock_guard<std::mutex> lock (mutex_);
342
+ MutexLock lock (mutex_);
338
343
if (api_ != NULL ) { // NOLINT
339
344
return api_->AddCompletionCallbackLambda (
340
345
handle_, callback,
0 commit comments