diff --git a/src/pipewire/client.c b/src/pipewire/client.c index d5ff20cef..4be927955 100644 --- a/src/pipewire/client.c +++ b/src/pipewire/client.c @@ -146,7 +146,8 @@ void pw_client_register(struct pw_client *client, spa_list_append(&core->client_list, &client->link); client->global = pw_core_add_global(core, owner, parent, core->type.client, PW_VERSION_CLIENT, client_bind_func, client); - client->info.id = client->global->id; + if (client->global != NULL) + client->info.id = client->global->id; } struct pw_core *pw_client_get_core(struct pw_client *client) diff --git a/src/pipewire/core.c b/src/pipewire/core.c index 571fc5b62..1b98568d4 100644 --- a/src/pipewire/core.c +++ b/src/pipewire/core.c @@ -465,7 +465,8 @@ struct pw_core *pw_core_new(struct pw_loop *main_loop, struct pw_properties *pro PW_VERSION_CORE, core_bind_func, this); - this->info.id = this->global->id; + if (this->global != NULL) + this->info.id = this->global->id; return this; diff --git a/src/pipewire/factory.c b/src/pipewire/factory.c index baa80bde7..b95b902c5 100644 --- a/src/pipewire/factory.c +++ b/src/pipewire/factory.c @@ -124,6 +124,8 @@ void pw_factory_register(struct pw_factory *factory, spa_list_append(&core->factory_list, &factory->link); factory->global = pw_core_add_global(core, owner, parent, core->type.factory, 0, factory_bind_func, factory); + if (factory->global != NULL) + factory->info.id = factory->global->id; } void *pw_factory_get_user_data(struct pw_factory *factory) diff --git a/src/pipewire/link.c b/src/pipewire/link.c index 8d8ce643a..7055a97c5 100644 --- a/src/pipewire/link.c +++ b/src/pipewire/link.c @@ -1221,9 +1221,11 @@ void pw_link_register(struct pw_link *link, struct pw_node *input_node, *output_node; spa_list_append(&core->link_list, &link->link); + link->global = pw_core_add_global(core, owner, parent, core->type.link, PW_VERSION_LINK, link_bind_func, link); - link->info.id = link->global->id; + if (link->global != NULL) + link->info.id = link->global->id; input_node = link->input->node; output_node = link->output->node; diff --git a/src/pipewire/module.c b/src/pipewire/module.c index 0859b88b5..e428bd775 100644 --- a/src/pipewire/module.c +++ b/src/pipewire/module.c @@ -222,7 +222,8 @@ struct pw_module *pw_module_load(struct pw_core *core, const char *name, const c core->type.module, PW_VERSION_MODULE, module_bind_func, this); - this->info.id = this->global->id; + if (this->global != NULL) + this->info.id = this->global->id; if (!init_func(this, args)) goto init_failed; @@ -273,7 +274,8 @@ void pw_module_destroy(struct pw_module *module) free((char *) module->info.args); spa_list_remove(&module->link); - pw_global_destroy(module->global); + if (module->global) + pw_global_destroy(module->global); dlclose(impl->hnd); free(impl); } diff --git a/src/pipewire/node.c b/src/pipewire/node.c index 3e1731494..0db704ca6 100644 --- a/src/pipewire/node.c +++ b/src/pipewire/node.c @@ -358,8 +358,9 @@ void pw_node_register(struct pw_node *this, this->global = pw_core_add_global(core, owner, parent, core->type.node, PW_VERSION_NODE, node_bind_func, this); + if (this->global != NULL) + this->info.id = this->global->id; - this->info.id = this->global->id; spa_hook_list_call(&this->listener_list, struct pw_node_events, initialized); pw_node_update_state(this, PW_NODE_STATE_SUSPENDED, NULL); diff --git a/src/pipewire/protocol.c b/src/pipewire/protocol.c index 752eb40c9..4646c3d30 100644 --- a/src/pipewire/protocol.c +++ b/src/pipewire/protocol.c @@ -39,6 +39,9 @@ struct pw_protocol *pw_protocol_new(struct pw_core *core, struct pw_protocol *protocol; protocol = calloc(1, sizeof(struct impl) + user_data_size); + if (protocol == NULL) + return NULL; + protocol->core = core; protocol->name = strdup(name);