mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-06 13:30:01 -05:00
core: don't remove client resource in hello
Keep the client resource of a client around and make sure we don't destroy it in hello.
This commit is contained in:
parent
a804b71267
commit
4e70cddf1d
4 changed files with 15 additions and 3 deletions
|
|
@ -169,6 +169,8 @@ static const struct pw_client_proxy_methods client_methods = {
|
|||
static void client_unbind_func(void *data)
|
||||
{
|
||||
struct pw_resource *resource = data;
|
||||
if (resource->id == 1)
|
||||
resource->client->client_resource = NULL;
|
||||
spa_list_remove(&resource->link);
|
||||
}
|
||||
|
||||
|
|
@ -199,6 +201,9 @@ global_bind(void *_data, struct pw_client *client, uint32_t permissions,
|
|||
|
||||
spa_list_append(&global->resource_list, &resource->link);
|
||||
|
||||
if (resource->id == 1)
|
||||
client->client_resource = resource;
|
||||
|
||||
this->info.change_mask = ~0;
|
||||
pw_client_resource_info(resource, &this->info);
|
||||
this->info.change_mask = 0;
|
||||
|
|
|
|||
|
|
@ -151,7 +151,11 @@ static const struct pw_resource_events resource_events = {
|
|||
static int destroy_resource(void *object, void *data)
|
||||
{
|
||||
struct pw_resource *resource = object;
|
||||
if (resource && resource != resource->client->core_resource) {
|
||||
struct pw_client *client = resource->client;
|
||||
|
||||
if (resource &&
|
||||
resource != client->core_resource &&
|
||||
resource != client->client_resource) {
|
||||
resource->removed = true;
|
||||
pw_resource_destroy(resource);
|
||||
}
|
||||
|
|
@ -363,6 +367,7 @@ static const struct pw_core_proxy_methods core_methods = {
|
|||
static void core_unbind_func(void *data)
|
||||
{
|
||||
struct pw_resource *resource = data;
|
||||
if (resource->id == 0)
|
||||
resource->client->core_resource = NULL;
|
||||
spa_list_remove(&resource->link);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,7 +96,8 @@ struct pw_core_proxy_methods {
|
|||
uint32_t version;
|
||||
/**
|
||||
* Start a conversation with the server. This will send
|
||||
* the core info..
|
||||
* the core info and will destroy all resources for the client
|
||||
* (except the core and client resource).
|
||||
*/
|
||||
int (*hello) (void *object, uint32_t version);
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -112,6 +112,7 @@ struct pw_client {
|
|||
struct pw_client_info info; /**< client info */
|
||||
|
||||
struct pw_resource *core_resource; /**< core resource object */
|
||||
struct pw_resource *client_resource; /**< client resource object */
|
||||
|
||||
struct pw_map objects; /**< list of resource objects */
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue