From 278cc9f90ad3481d93c052d6972c2b0e96e0707c Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 25 Feb 2020 15:05:51 +0100 Subject: [PATCH] resource: add function to send error to another resource Make a function to send an error to another resource. This can be used to send errors to proxies that now have a resource associated with them, like in error cases. --- src/pipewire/resource.c | 24 +++++++++++++++++++----- src/pipewire/resource.h | 1 + 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/pipewire/resource.c b/src/pipewire/resource.c index 45a002f40..60fd95d4b 100644 --- a/src/pipewire/resource.c +++ b/src/pipewire/resource.c @@ -225,16 +225,30 @@ uint32_t pw_resource_get_bound_id(struct pw_resource *resource) return resource->bound_id; } +static void SPA_PRINTF_FUNC(4, 0) +pw_resource_errorv_id(struct pw_resource *resource, uint32_t id, int res, const char *error, va_list ap) +{ + struct pw_impl_client *client = resource->client; + if (client->core_resource != NULL) + pw_core_resource_errorv(client->core_resource, + id, client->recv_seq, res, error, ap); +} + SPA_EXPORT void pw_resource_errorf(struct pw_resource *resource, int res, const char *error, ...) { va_list ap; - struct pw_impl_client *client = resource->client; - va_start(ap, error); - if (client->core_resource != NULL) - pw_core_resource_errorv(client->core_resource, - resource->id, client->recv_seq, res, error, ap); + pw_resource_errorv_id(resource, resource->id, res, error, ap); + va_end(ap); +} + +SPA_EXPORT +void pw_resource_errorf_id(struct pw_resource *resource, uint32_t id, int res, const char *error, ...) +{ + va_list ap; + va_start(ap, error); + pw_resource_errorv_id(resource, id, res, error, ap); va_end(ap); } diff --git a/src/pipewire/resource.h b/src/pipewire/resource.h index ec675d421..4b2f39cc8 100644 --- a/src/pipewire/resource.h +++ b/src/pipewire/resource.h @@ -134,6 +134,7 @@ uint32_t pw_resource_get_bound_id(struct pw_resource *resource); /** Generate an error for a resource */ void pw_resource_error(struct pw_resource *resource, int res, const char *error); void pw_resource_errorf(struct pw_resource *resource, int res, const char *error, ...) SPA_PRINTF_FUNC(3, 4); +void pw_resource_errorf_id(struct pw_resource *resource, uint32_t id, int res, const char *error, ...) SPA_PRINTF_FUNC(4, 5); /** Get the list of object listeners from a resource */ struct spa_hook_list *pw_resource_get_object_listeners(struct pw_resource *resource);