Files
scylladb/service_permit.hh
Avi Kivity 0ae22a09d4 LICENSE: Update to version 1.1
Updated terms of non-commercial use (must be a never-customer).
2026-04-12 19:46:33 +03:00

37 lines
1.1 KiB
C++

/*
* Copyright (C) 2019-present ScyllaDB
*/
/*
* SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.1
*/
#pragma once
#include <seastar/core/semaphore.hh>
#include <seastar/core/shared_ptr.hh>
class service_permit {
seastar::lw_shared_ptr<seastar::semaphore_units<>> _permit;
service_permit(seastar::semaphore_units<>&& u) : _permit(seastar::make_lw_shared<seastar::semaphore_units<>>(std::move(u))) {}
friend service_permit make_service_permit(seastar::semaphore_units<>&& permit);
friend service_permit empty_service_permit();
public:
size_t count() const { return _permit ? _permit->count() : 0; };
// Merge additional semaphore units into this permit.
// Used to grow the permit after the actual resource cost is known.
void adopt(seastar::semaphore_units<>&& units) {
if (_permit) {
_permit->adopt(std::move(units));
}
}
};
inline service_permit make_service_permit(seastar::semaphore_units<>&& permit) {
return service_permit(std::move(permit));
}
inline service_permit empty_service_permit() {
return make_service_permit(seastar::semaphore_units<>());
}