mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -05:00
media-session: don't emit metadata remove in shutdown
When in shutdown we destroy all objects but don't remove all the metadata associated with them, like route settings.
This commit is contained in:
parent
19a67a2da5
commit
19dc150643
3 changed files with 13 additions and 1 deletions
|
|
@ -72,6 +72,7 @@
|
||||||
#define sm_media_session_emit_create(s,obj) sm_media_session_emit(s, create, 0, obj)
|
#define sm_media_session_emit_create(s,obj) sm_media_session_emit(s, create, 0, obj)
|
||||||
#define sm_media_session_emit_remove(s,obj) sm_media_session_emit(s, remove, 0, obj)
|
#define sm_media_session_emit_remove(s,obj) sm_media_session_emit(s, remove, 0, obj)
|
||||||
#define sm_media_session_emit_rescan(s,seq) sm_media_session_emit(s, rescan, 0, seq)
|
#define sm_media_session_emit_rescan(s,seq) sm_media_session_emit(s, rescan, 0, seq)
|
||||||
|
#define sm_media_session_emit_shutdown(s) sm_media_session_emit(s, shutdown, 0)
|
||||||
#define sm_media_session_emit_destroy(s) sm_media_session_emit(s, destroy, 0)
|
#define sm_media_session_emit_destroy(s) sm_media_session_emit(s, destroy, 0)
|
||||||
|
|
||||||
int sm_access_flatpak_start(struct sm_media_session *sess);
|
int sm_access_flatpak_start(struct sm_media_session *sess);
|
||||||
|
|
@ -2047,6 +2048,7 @@ static void session_shutdown(struct impl *impl)
|
||||||
struct sm_object *obj;
|
struct sm_object *obj;
|
||||||
|
|
||||||
pw_log_info(NAME" %p", impl);
|
pw_log_info(NAME" %p", impl);
|
||||||
|
sm_media_session_emit_shutdown(impl);
|
||||||
|
|
||||||
spa_list_consume(obj, &impl->global_list, link)
|
spa_list_consume(obj, &impl->global_list, link)
|
||||||
sm_object_destroy(obj);
|
sm_object_destroy(obj);
|
||||||
|
|
|
||||||
|
|
@ -228,6 +228,7 @@ struct sm_media_session_events {
|
||||||
void (*remove) (void *data, struct sm_object *object);
|
void (*remove) (void *data, struct sm_object *object);
|
||||||
|
|
||||||
void (*rescan) (void *data, int seq);
|
void (*rescan) (void *data, int seq);
|
||||||
|
void (*shutdown) (void *data);
|
||||||
void (*destroy) (void *data);
|
void (*destroy) (void *data);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -94,6 +94,8 @@ struct metadata {
|
||||||
struct sm_media_session *session;
|
struct sm_media_session *session;
|
||||||
struct spa_hook session_listener;
|
struct spa_hook session_listener;
|
||||||
struct pw_proxy *proxy;
|
struct pw_proxy *proxy;
|
||||||
|
|
||||||
|
unsigned int shutdown:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void emit_properties(struct metadata *this)
|
static void emit_properties(struct metadata *this)
|
||||||
|
|
@ -159,7 +161,7 @@ static int clear_subjects(struct metadata *this, uint32_t subject)
|
||||||
pw_array_remove(&this->metadata, item);
|
pw_array_remove(&this->metadata, item);
|
||||||
removed++;
|
removed++;
|
||||||
}
|
}
|
||||||
if (removed > 0)
|
if (removed > 0 && !this->shutdown)
|
||||||
pw_metadata_emit_property(&this->hooks, subject, NULL, NULL, NULL);
|
pw_metadata_emit_property(&this->hooks, subject, NULL, NULL, NULL);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -240,6 +242,12 @@ static void session_remove(void *data, struct sm_object *object)
|
||||||
clear_subjects(this, object->id);
|
clear_subjects(this, object->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void session_shutdown(void *data)
|
||||||
|
{
|
||||||
|
struct metadata *this = data;
|
||||||
|
this->shutdown = true;
|
||||||
|
}
|
||||||
|
|
||||||
static void session_destroy(void *data)
|
static void session_destroy(void *data)
|
||||||
{
|
{
|
||||||
struct metadata *this = data;
|
struct metadata *this = data;
|
||||||
|
|
@ -254,6 +262,7 @@ static void session_destroy(void *data)
|
||||||
|
|
||||||
static const struct sm_media_session_events session_events = {
|
static const struct sm_media_session_events session_events = {
|
||||||
SM_VERSION_MEDIA_SESSION_EVENTS,
|
SM_VERSION_MEDIA_SESSION_EVENTS,
|
||||||
|
.shutdown = session_shutdown,
|
||||||
.destroy = session_destroy,
|
.destroy = session_destroy,
|
||||||
.remove = session_remove,
|
.remove = session_remove,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue