diff --git a/src/modules/module-adapter.c b/src/modules/module-adapter.c index bb6db61e8..9ef041f21 100644 --- a/src/modules/module-adapter.c +++ b/src/modules/module-adapter.c @@ -117,14 +117,17 @@ static void node_initialized(void *data) if (res < 0) goto error_bind; - if ((bound_resource = pw_impl_client_find_resource(client, nd->new_id)) == NULL) + if ((bound_resource = pw_impl_client_find_resource(client, nd->new_id)) == NULL) { + res = -EIO; goto error_bind; + } pw_resource_add_listener(bound_resource, &nd->resource_listener, &resource_events, nd); return; error_bind: - pw_resource_error(nd->resource, res, "can't bind adapter node"); + pw_resource_errorf_id(nd->resource, nd->new_id, res, + "can't bind adapter node: %s", spa_strerror(res)); return; } @@ -218,19 +221,19 @@ error_properties: res = -EINVAL; pw_log_error("factory %p: usage: " FACTORY_USAGE, d->this); if (resource) - pw_resource_error(resource, res, "usage: " FACTORY_USAGE); + pw_resource_errorf_id(resource, new_id, res, "usage: " FACTORY_USAGE); goto error_cleanup; error_no_mem: res = -errno; pw_log_error("can't create node: %m"); if (resource) - pw_resource_errorf(resource, 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_error(resource, res, "usage: "ADAPTER_USAGE); + pw_resource_errorf_id(resource, new_id, res, "usage: "ADAPTER_USAGE); goto error_cleanup; error_cleanup: if (properties) diff --git a/src/modules/module-client-device.c b/src/modules/module-client-device.c index 5979df7cd..1350216bd 100644 --- a/src/modules/module-client-device.c +++ b/src/modules/module-client-device.c @@ -99,19 +99,19 @@ static void *create_object(void *_data, error_resource: pw_log_error("can't create resource: %s", spa_strerror(res)); - pw_resource_errorf(resource, res, "can't create resource: %s", spa_strerror(res)); + pw_resource_errorf_id(resource, new_id, res, "can't create resource: %s", spa_strerror(res)); goto error_exit; error_properties: pw_log_error("can't create properties: %s", spa_strerror(res)); - pw_resource_errorf(resource, res, "can't create properties: %s", spa_strerror(res)); + pw_resource_errorf_id(resource, new_id, res, "can't create properties: %s", spa_strerror(res)); goto error_exit_free; error_device: pw_log_error("can't create device: %s", spa_strerror(res)); - pw_resource_errorf(resource, res, "can't create device: %s", spa_strerror(res)); + pw_resource_errorf_id(resource, new_id, res, "can't create device: %s", spa_strerror(res)); goto error_exit_free; error_exit_free: - pw_resource_destroy(device_resource); + pw_resource_remove(device_resource); error_exit: errno = -res; return NULL; diff --git a/src/modules/module-client-node.c b/src/modules/module-client-node.c index 49d121a23..6a993d684 100644 --- a/src/modules/module-client-node.c +++ b/src/modules/module-client-node.c @@ -93,15 +93,15 @@ static void *create_object(void *_data, error_resource: pw_log_error("can't create resource: %s", spa_strerror(res)); - pw_resource_errorf(resource, res, "can't create resource: %s", spa_strerror(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 node: %s", spa_strerror(res)); - pw_resource_errorf(resource, res, "can't create node: %s", spa_strerror(res)); + pw_resource_errorf(node_resource, res, "can't create node: %s", spa_strerror(res)); goto error_exit_free; error_exit_free: - pw_resource_destroy(node_resource); + pw_resource_remove(node_resource); error_exit: errno = -res; return NULL; diff --git a/src/modules/module-link-factory.c b/src/modules/module-link-factory.c index 73f32155d..8c23d862a 100644 --- a/src/modules/module-link-factory.c +++ b/src/modules/module-link-factory.c @@ -134,7 +134,8 @@ static void link_initialized(void *data) return; error_bind: - pw_resource_errorf(ld->factory_resource, res, "can't bind link: %s", spa_strerror(res)); + pw_resource_errorf_id(ld->factory_resource, ld->new_id, res, + "can't bind link: %s", spa_strerror(res)); } static const struct pw_impl_link_events link_events = { diff --git a/src/modules/module-metadata.c b/src/modules/module-metadata.c index 9e501f8d1..38a32d82f 100644 --- a/src/modules/module-metadata.c +++ b/src/modules/module-metadata.c @@ -78,26 +78,24 @@ static void *create_object(void *_data, goto error_resource; } - pw_log_debug("."); result = pw_metadata_new(pw_impl_client_get_context(client), metadata_resource, properties); if (result == NULL) { res = -errno; goto error_node; } - pw_log_debug("."); return result; error_resource: pw_log_error("can't create resource: %s", spa_strerror(res)); - pw_resource_errorf(resource, res, "can't create resource: %s", spa_strerror(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)); - pw_resource_errorf(resource, res, "can't create metadata: %s", spa_strerror(res)); + pw_resource_errorf_id(resource, new_id, res, "can't create metadata: %s", spa_strerror(res)); goto error_exit_free; error_exit_free: - pw_resource_destroy(metadata_resource); + pw_resource_remove(metadata_resource); error_exit: errno = -res; return NULL; diff --git a/src/modules/module-protocol-native.c b/src/modules/module-protocol-native.c index 0755fc077..141a8daca 100644 --- a/src/modules/module-protocol-native.c +++ b/src/modules/module-protocol-native.c @@ -200,7 +200,7 @@ process_messages(struct client_data *data) required = demarshal[msg->opcode].permissions | PW_PERM_X; if ((required & permissions) != required) { - pw_resource_errorf(resource, + pw_resource_errorf_id(resource, msg->id, -EACCES, "no permission to call method %u on %u (requires %08x, have %08x)", msg->opcode, msg->id, required, permissions); continue; @@ -215,17 +215,18 @@ done: return res; invalid_method: - pw_resource_errorf(resource, res, "invalid method id:%u op:%u", + pw_resource_errorf_id(resource, msg->id, res, "invalid method id:%u op:%u", msg->id, msg->opcode); goto done; invalid_message: - pw_resource_errorf(resource, res, "invalid message received id:%u op:%u (%s)", + pw_resource_errorf_id(resource, msg->id, res, "invalid message id:%u op:%u (%s)", msg->id, msg->opcode, spa_strerror(res)); debug_msg("*invalid message*", msg, true); goto done; error: - pw_resource_errorf(client->core_resource, res, "client error %d (%s)", - res, spa_strerror(res)); + if (client->core_resource) + pw_resource_errorf(client->core_resource, res, "client error %d (%s)", + res, spa_strerror(res)); goto done; } diff --git a/src/modules/spa/module-device-factory.c b/src/modules/spa/module-device-factory.c index 9e85eaabf..f2dbbb306 100644 --- a/src/modules/spa/module-device-factory.c +++ b/src/modules/spa/module-device-factory.c @@ -135,12 +135,14 @@ error_properties: res = -EINVAL; pw_log_error("factory %p: usage: " FACTORY_USAGE, data->this); if (resource) - pw_resource_error(resource, res, "usage: " FACTORY_USAGE); + pw_resource_errorf_id(resource, new_id, res, + "usage: "FACTORY_USAGE); goto error_exit; error_device: pw_log_error("can't create device: %s", spa_strerror(res)); if (resource) - pw_resource_errorf(resource, res, "can't create device: %s", spa_strerror(res)); + pw_resource_errorf_id(resource, new_id, res, + "can't create device: %s", spa_strerror(res)); goto error_exit; error_exit: errno = -res; diff --git a/src/modules/spa/module-node-factory.c b/src/modules/spa/module-node-factory.c index adca96cf2..a48c0ad1e 100644 --- a/src/modules/spa/module-node-factory.c +++ b/src/modules/spa/module-node-factory.c @@ -161,16 +161,18 @@ error_properties: res = -EINVAL; pw_log_error("factory %p: usage: " FACTORY_USAGE, data->this); if (resource) - pw_resource_error(resource, 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(resource, 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_exit; error_bind: - pw_resource_error(resource, res, "can't bind node"); + pw_resource_errorf_id(resource, new_id, res, "can't bind node"); goto error_exit; error_exit_cleanup: diff --git a/src/pipewire/impl-core.c b/src/pipewire/impl-core.c index b5712dfda..f18640905 100644 --- a/src/pipewire/impl-core.c +++ b/src/pipewire/impl-core.c @@ -69,11 +69,11 @@ static void * registry_bind(void *object, uint32_t id, error_no_id: pw_log_debug("registry %p: no global with id %u to bind to %u", resource, id, new_id); - pw_resource_errorf(resource, -ENOENT, "no global %u", id); + pw_resource_errorf_id(resource, new_id, -ENOENT, "no global %u", id); goto error_exit_clean; error_wrong_interface: pw_log_debug("registry %p: global with id %u has no interface %s", resource, id, type); - pw_resource_errorf(resource, -ENOENT, "no interface %s", type); + pw_resource_errorf_id(resource, new_id, -ENOENT, "no interface %s", type); goto error_exit_clean; error_exit_clean: /* unmark the new_id the map, the client does not yet know about the failed @@ -317,18 +317,18 @@ core_create_object(void *object, error_no_factory: res = -ENOENT; pw_log_debug(NAME" %p: can't find factory '%s'", context, factory_name); - pw_resource_errorf(resource, res, "unknown factory name %s", factory_name); + pw_resource_errorf_id(resource, new_id, res, "unknown factory name %s", factory_name); goto error_exit; error_version: error_type: res = -EPROTO; pw_log_debug(NAME" %p: invalid resource type/version", context); - pw_resource_errorf(resource, res, "wrong resource type/version"); + pw_resource_errorf_id(resource, new_id, res, "wrong resource type/version"); goto error_exit; error_properties: res = -errno; pw_log_debug(NAME" %p: can't create properties: %m", context); - pw_resource_errorf(resource, res, "can't create properties: %s", spa_strerror(res)); + pw_resource_errorf_id(resource, new_id, res, "can't create properties: %s", spa_strerror(res)); goto error_exit; error_create_failed: res = -errno;