Remove try_get and put functions for services

This commit is contained in:
Ken Van Hoeylandt 2026-07-05 22:45:08 +02:00
parent 469cf0d275
commit e801dcf397
4 changed files with 7 additions and 68 deletions

View File

@ -86,19 +86,6 @@ void* service_instance_get_data(struct ServiceInstance* instance);
*/
ServiceState service_instance_get_state(struct ServiceInstance* instance);
/**
* @brief Try to claim usage for this service instance. Increases reference count internally.
* @param instance non-null service instance pointer
* @return true when the instance is started and ref count was increased.
*/
bool service_instance_try_get(struct ServiceInstance* instance);
/**
* @brief Release a claim for usage of this service instance. Decreases reference count internally.
* @param instance non-null service instance pointer
*/
void service_instance_put(struct ServiceInstance* instance);
#ifdef __cplusplus
}
#endif

View File

@ -31,6 +31,13 @@ extern "C" {
*/
error_t service_manager_remove(const char* id);
/**
* @brief Find a registered manifest by id.
* @param[in] id non-null service id
* @return the manifest, or NULL if not found
*/
const struct ServiceManifest* service_manager_find_manifest(const char* id);
/**
* @brief Start a registered service by id.
* @param[in] id non-null service id
@ -56,13 +63,6 @@ error_t service_manager_stop(const char* id);
*/
ServiceState service_manager_get_state(const char* id);
/**
* @brief Find a registered manifest by id.
* @param[in] id non-null service id
* @return the manifest, or NULL if not found
*/
const struct ServiceManifest* service_manager_find_manifest(const char* id);
/**
* @brief Find the context of a running service by id.
* @param[in] id non-null service id

View File

@ -12,7 +12,6 @@
struct ServiceInstanceInternal {
Mutex mutex {};
ServiceState state = SERVICE_STATE_STOPPED;
uint32_t use_count = 0;
};
extern "C" {
@ -84,22 +83,4 @@ const ServiceManifest* service_context_get_manifest(ServiceContext* context) {
return service_instance_get_manifest(context);
}
bool service_instance_try_get(struct ServiceInstance* instance) {
mutex_lock(&instance->internal->mutex);
bool acquired = instance->internal->state == SERVICE_STATE_STARTED;
if (acquired) {
instance->internal->use_count++;
}
mutex_unlock(&instance->internal->mutex);
return acquired;
}
void service_instance_put(struct ServiceInstance* instance) {
mutex_lock(&instance->internal->mutex);
if (instance->internal->use_count > 0) {
instance->internal->use_count--;
}
mutex_unlock(&instance->internal->mutex);
}
} // extern "C"

View File

@ -68,35 +68,6 @@ TEST_CASE("ServiceInstance construction and destruction") {
CHECK_EQ(last_destroy_context, &context_marker);
}
TEST_CASE("service_instance_try_get/put reference counting") {
reset_counters();
static const ServiceManifest manifest = {
.id = "refcount-test",
.create_service = test_create_service,
.destroy_service = test_destroy_service
};
ServiceInstance instance = { .manifest = nullptr, .data = nullptr, .on_start = nullptr, .on_stop = nullptr, .internal = nullptr };
CHECK_EQ(service_instance_construct(&instance, &manifest), ERROR_NONE);
// Not started yet: claiming usage should fail
CHECK_FALSE(service_instance_try_get(&instance));
service_instance_set_state(&instance, SERVICE_STATE_STARTED);
CHECK(service_instance_try_get(&instance));
CHECK(service_instance_try_get(&instance));
service_instance_put(&instance);
service_instance_put(&instance);
// Extra put beyond the claimed count should not underflow
service_instance_put(&instance);
service_instance_set_state(&instance, SERVICE_STATE_STOPPED);
CHECK_EQ(service_instance_destruct(&instance), ERROR_NONE);
}
TEST_CASE("service_manager_add rejects duplicate ids") {
reset_counters();