resource: allow NULL resource in error

And then log en error instead.
We can remove some awkward patterns in modules.
This commit is contained in:
Wim Taymans 2022-02-02 21:33:33 +01:00
parent 8aea38e81a
commit 1a911a9ccd
7 changed files with 42 additions and 41 deletions

View file

@ -243,21 +243,16 @@ static void *create_object(void *_data,
error_properties:
res = -EINVAL;
pw_log_error("factory %p: usage: " FACTORY_USAGE, d->this);
if (resource)
pw_resource_errorf_id(resource, new_id, res, "usage: " FACTORY_USAGE);
pw_resource_errorf_id(resource, new_id, res, "usage: " FACTORY_USAGE);
goto error_cleanup;
error_errno:
res = -errno;
pw_log_error("can't create node: %m");
if (resource)
pw_resource_errorf_id(resource, new_id, res, "can't create node: %s", spa_strerror(res));
pw_resource_errorf_id(resource, new_id, res, "can't create node: %s", spa_strerror(res));
goto error_cleanup;
error_usage:
res = -EINVAL;
pw_log_error("usage: "ADAPTER_USAGE);
if (resource)
pw_resource_errorf_id(resource, new_id, res, "usage: "ADAPTER_USAGE);
pw_resource_errorf_id(resource, new_id, res, "usage: "ADAPTER_USAGE);
goto error_cleanup;
error_cleanup:
pw_properties_free(properties);

View file

@ -121,15 +121,11 @@ static void *create_object(void *_data,
return result;
error_resource:
pw_log_error("can't create resource: %s", spa_strerror(res));
if (resource)
pw_resource_errorf_id(resource, new_id, res,
pw_resource_errorf_id(resource, new_id, res,
"can't create resource: %s", spa_strerror(res));
goto error_exit;
error_node:
pw_log_error("can't create metadata: %s", spa_strerror(res));
if (resource)
pw_resource_errorf_id(resource, new_id, res,
pw_resource_errorf_id(resource, new_id, res,
"can't create metadata: %s", spa_strerror(res));
goto error_exit_free;

View file

@ -264,8 +264,7 @@ done:
return res;
error:
if (client->core_resource)
pw_resource_errorf(client->core_resource, res, "client error %d (%s)",
pw_resource_errorf(client->core_resource, res, "client error %d (%s)",
res, spa_strerror(res));
goto done;
}

View file

@ -165,15 +165,10 @@ static void *create_object(void *_data,
error_properties:
res = -EINVAL;
pw_log_error("factory %p: usage: " FACTORY_USAGE, data->this);
if (resource)
pw_resource_errorf_id(resource, new_id, res,
"usage: "FACTORY_USAGE);
pw_resource_errorf_id(resource, new_id, res, "usage: "FACTORY_USAGE);
goto error_exit_cleanup;
error_device:
pw_log_debug("can't create device %s: %s", factory_name, spa_strerror(res));
if (resource)
pw_resource_errorf_id(resource, new_id, res,
pw_resource_errorf_id(resource, new_id, res,
"can't create device %s: %s", factory_name,
spa_strerror(res));
goto error_exit;

View file

@ -163,16 +163,11 @@ static void *create_object(void *_data,
error_properties:
res = -EINVAL;
pw_log_error("factory %p: usage: " FACTORY_USAGE, data->this);
if (resource)
pw_resource_errorf_id(resource, new_id, res,
"usage: "FACTORY_USAGE);
pw_resource_errorf_id(resource, new_id, res, "usage: "FACTORY_USAGE);
goto error_exit_cleanup;
error_create_node:
res = -errno;
pw_log_error("can't create node: %m");
if (resource)
pw_resource_errorf_id(resource, new_id, res,
pw_resource_errorf_id(resource, new_id, res,
"can't create node: %s", spa_strerror(res));
goto error_exit;
error_bind:

View file

@ -360,7 +360,11 @@ pw_core_resource_errorv(struct pw_resource *resource, uint32_t id, int seq,
buffer[1023] = '\0';
pw_log_debug("resource %p: id:%d seq:%d res:%d (%s) msg:\"%s\"",
resource, id, seq, res, spa_strerror(res), buffer);
pw_core_resource_error(resource, id, seq, res, buffer);
if (resource)
pw_core_resource_error(resource, id, seq, res, buffer);
else
pw_log_error("id:%d seq:%d res:%d (%s) msg:\"%s\"",
id, seq, res, spa_strerror(res), buffer);
}
static inline SPA_PRINTF_FUNC(5,6) void

View file

@ -228,10 +228,16 @@ uint32_t pw_resource_get_bound_id(struct pw_resource *resource)
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);
struct pw_impl_client *client;
if (resource) {
client = resource->client;
if (client->core_resource != NULL)
pw_core_resource_errorv(client->core_resource,
id, client->recv_seq, res, error, ap);
} else {
pw_logtv(SPA_LOG_LEVEL_ERROR, PW_LOG_TOPIC_DEFAULT, error, ap);
}
}
SPA_EXPORT
@ -239,7 +245,10 @@ void pw_resource_errorf(struct pw_resource *resource, int res, const char *error
{
va_list ap;
va_start(ap, error);
pw_resource_errorv_id(resource, resource->id, res, error, ap);
if (resource)
pw_resource_errorv_id(resource, resource->id, res, error, ap);
else
pw_logtv(SPA_LOG_LEVEL_ERROR, PW_LOG_TOPIC_DEFAULT, error, ap);
va_end(ap);
}
@ -248,17 +257,25 @@ void pw_resource_errorf_id(struct pw_resource *resource, uint32_t id, int res, c
{
va_list ap;
va_start(ap, error);
pw_resource_errorv_id(resource, id, res, error, ap);
if (resource)
pw_resource_errorv_id(resource, id, res, error, ap);
else
pw_logtv(SPA_LOG_LEVEL_ERROR, PW_LOG_TOPIC_DEFAULT, error, ap);
va_end(ap);
}
SPA_EXPORT
void pw_resource_error(struct pw_resource *resource, int res, const char *error)
{
struct pw_impl_client *client = resource->client;
if (client->core_resource != NULL)
pw_core_resource_error(client->core_resource,
resource->id, client->recv_seq, res, error);
struct pw_impl_client *client;
if (resource) {
client = resource->client;
if (client->core_resource != NULL)
pw_core_resource_error(client->core_resource,
resource->id, client->recv_seq, res, error);
} else {
pw_log_error("%s: %s", error, spa_strerror(res));
}
}
SPA_EXPORT