blob: 68bbdca88b6baebea4bdb29ebfa0f1273968ac04 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef PERIDOT_BIN_LEDGER_LOCK_LOCK_H_
#define PERIDOT_BIN_LEDGER_LOCK_LOCK_H_
#include <memory>
#include <lib/callback/operation_serializer.h>
#include <lib/fxl/macros.h>
#include <lib/fxl/memory/weak_ptr.h>
#include "peridot/bin/ledger/coroutine/coroutine.h"
namespace lock {
// A lock. As long as this object lives, OperationSerializer blocks all other
// operations.
class Lock {
public:
virtual ~Lock() {}
};
// Creates and acquires a lock.
// |handler| and |serializer| are inputs, |lock| is the output.
// Returns OK if the lock is acquired (meaning the coroutine is now running as
// a serialized operation of |serializer|), and INTERRUPTED if the coroutine
// stack must be unwound immediately (see coroutine::SyncCall for this case).
FXL_WARN_UNUSED_RESULT coroutine::ContinuationStatus AcquireLock(
coroutine::CoroutineHandler* handler,
callback::OperationSerializer* serializer, std::unique_ptr<Lock>* lock);
} // namespace lock
#endif // PERIDOT_BIN_LEDGER_LOCK_LOCK_H_