From ffb7663f4df3db78f48621890ec8bf3e8b41b04d Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 4 Nov 2025 13:50:38 +0100 Subject: [PATCH] Revert "stream: add peer_added and peer_removed signals" This reverts commit 3eb011c9d1fb56f51d6d3337ed4deb6d56241a28. Not a good idea, the internal signals are for scheduling peers and so some peers are simply not signaled when they don't need to be scheduled, like for async nodes or upstream nodes. --- src/modules/module-client-node/client-node.c | 10 ++-------- src/pipewire/impl-node.c | 8 ++++---- src/pipewire/impl-node.h | 10 +++++----- src/pipewire/private.h | 6 ++---- src/pipewire/stream.c | 13 ------------- src/pipewire/stream.h | 7 +------ 6 files changed, 14 insertions(+), 40 deletions(-) diff --git a/src/modules/module-client-node/client-node.c b/src/modules/module-client-node/client-node.c index 3e5218102..a17dc87ce 100644 --- a/src/modules/module-client-node/client-node.c +++ b/src/modules/module-client-node/client-node.c @@ -1270,14 +1270,11 @@ static void client_node_resource_pong(void *data, int seq) spa_node_emit_result(&impl->hooks, seq, 0, 0, NULL); } -static void node_peer_added(void *data, struct pw_impl_node *peer, uint32_t id) +static void node_peer_added(void *data, struct pw_impl_node *peer) { struct impl *impl = data; struct pw_memblock *m; - if (peer == NULL) - return; - m = pw_mempool_import_block(impl->client_pool, peer->activation); if (m == NULL) { pw_log_warn("%p: can't ensure mem: %m", impl); @@ -1298,14 +1295,11 @@ static void node_peer_added(void *data, struct pw_impl_node *peer, uint32_t id) sizeof(struct pw_node_activation)); } -static void node_peer_removed(void *data, struct pw_impl_node *peer, uint32_t id) +static void node_peer_removed(void *data, struct pw_impl_node *peer) { struct impl *impl = data; struct pw_memblock *m; - if (peer == NULL) - return; - m = pw_mempool_find_fd(impl->client_pool, peer->activation->fd); if (m == NULL) { pw_log_warn("%p: unknown peer %p fd:%d", impl, peer, diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c index 6321d6c80..a8f65b06c 100644 --- a/src/pipewire/impl-node.c +++ b/src/pipewire/impl-node.c @@ -898,8 +898,8 @@ int pw_impl_node_add_target(struct pw_impl_node *node, struct pw_node_target *t) { pw_loop_locked(node->data_loop, do_add_target, SPA_ID_INVALID, &node, sizeof(void *), t); - - pw_impl_node_emit_peer_added(node, t->node, t->id); + if (t->node) + pw_impl_node_emit_peer_added(node, t->node); return 0; } @@ -934,8 +934,8 @@ int pw_impl_node_remove_target(struct pw_impl_node *node, struct pw_node_target * can inspect the nodes as well */ pw_loop_locked(node->data_loop, do_remove_target, SPA_ID_INVALID, &node, sizeof(void *), t); - - pw_impl_node_emit_peer_removed(node, t->node, t->id); + if (t->node) + pw_impl_node_emit_peer_removed(node, t->node); return 0; } diff --git a/src/pipewire/impl-node.h b/src/pipewire/impl-node.h index dfb880320..7f7edb37a 100644 --- a/src/pipewire/impl-node.h +++ b/src/pipewire/impl-node.h @@ -29,7 +29,7 @@ struct pw_impl_port; /** Node events, listen to them with \ref pw_impl_node_add_listener */ struct pw_impl_node_events { -#define PW_VERSION_IMPL_NODE_EVENTS 1 +#define PW_VERSION_IMPL_NODE_EVENTS 0 uint32_t version; /** the node is destroyed */ @@ -69,10 +69,10 @@ struct pw_impl_node_events { /** the driver of the node changed */ void (*driver_changed) (void *data, struct pw_impl_node *old, struct pw_impl_node *driver); - /** a peer was added, id added in version 1 */ - void (*peer_added) (void *data, struct pw_impl_node *peer, uint32_t id); - /** a peer was removed, id added in version 1 */ - void (*peer_removed) (void *data, struct pw_impl_node *peer, uint32_t id); + /** a peer was added */ + void (*peer_added) (void *data, struct pw_impl_node *peer); + /** a peer was removed */ + void (*peer_removed) (void *data, struct pw_impl_node *peer); }; struct pw_impl_node_rt_events { diff --git a/src/pipewire/private.h b/src/pipewire/private.h index 695d1f6e8..36f85bd9d 100644 --- a/src/pipewire/private.h +++ b/src/pipewire/private.h @@ -717,8 +717,8 @@ void pw_node_peer_unref(struct pw_node_peer *peer); #define pw_impl_node_emit_result(n,s,r,t,result) pw_impl_node_emit(n, result, 0, s, r, t, result) #define pw_impl_node_emit_event(n,e) pw_impl_node_emit(n, event, 0, e) #define pw_impl_node_emit_driver_changed(n,o,d) pw_impl_node_emit(n, driver_changed, 0, o, d) -#define pw_impl_node_emit_peer_added(n,p,i) pw_impl_node_emit(n, peer_added, 1, p, i) -#define pw_impl_node_emit_peer_removed(n,p,i) pw_impl_node_emit(n, peer_removed, 1, p, i) +#define pw_impl_node_emit_peer_added(n,p) pw_impl_node_emit(n, peer_added, 0, p) +#define pw_impl_node_emit_peer_removed(n,p) pw_impl_node_emit(n, peer_removed, 0, p) #define pw_impl_node_rt_emit(o,m,v,...) spa_hook_list_call(&o->rt_listener_list, struct pw_impl_node_rt_events, m, v, ##__VA_ARGS__) #define pw_impl_node_rt_emit_drained(n) pw_impl_node_rt_emit(n, drained, 0) @@ -1145,8 +1145,6 @@ struct pw_core { #define pw_stream_emit_control_info(s,i,c) pw_stream_emit(s, control_info, 0, i, c) #define pw_stream_emit_command(s,c) pw_stream_emit(s, command,1,c) #define pw_stream_emit_trigger_done(s) pw_stream_emit(s, trigger_done,2) -#define pw_stream_emit_peer_added(s,i) pw_stream_emit(s, peer_added, 3, i) -#define pw_stream_emit_peer_removed(s,i) pw_stream_emit(s, peer_removed, 3, i) struct pw_stream { diff --git a/src/pipewire/stream.c b/src/pipewire/stream.c index 613732b68..9387ee58a 100644 --- a/src/pipewire/stream.c +++ b/src/pipewire/stream.c @@ -1466,24 +1466,11 @@ static void node_state_changed(void *data, enum pw_node_state old, } } -static void node_peer_added (void *data, struct pw_impl_node *node, uint32_t id) -{ - struct pw_stream *stream = data; - pw_stream_emit_peer_added(stream, id); -} -static void node_peer_removed (void *data, struct pw_impl_node *node, uint32_t id) -{ - struct pw_stream *stream = data; - pw_stream_emit_peer_removed(stream, id); -} - static const struct pw_impl_node_events node_events = { PW_VERSION_IMPL_NODE_EVENTS, .destroy = node_event_destroy, .info_changed = node_event_info, .state_changed = node_state_changed, - .peer_added = node_peer_added, - .peer_removed = node_peer_removed, }; static void on_core_error(void *data, uint32_t id, int seq, int res, const char *message) diff --git a/src/pipewire/stream.h b/src/pipewire/stream.h index 7d98179f7..28b4eba1f 100644 --- a/src/pipewire/stream.h +++ b/src/pipewire/stream.h @@ -414,7 +414,7 @@ struct pw_time { /** Events for a stream. These events are always called from the mainloop * unless explicitly documented otherwise. */ struct pw_stream_events { -#define PW_VERSION_STREAM_EVENTS 3 +#define PW_VERSION_STREAM_EVENTS 2 uint32_t version; void (*destroy) (void *data); @@ -453,11 +453,6 @@ struct pw_stream_events { * can also be called directly from the realtime data * thread if the user is prepared to deal with this. */ void (*trigger_done) (void *data); - - /* notify that a new node linked to the stream, since 1.6.0:3 */ - void (*peer_added) (void *data, uint32_t id); - /* notify that a new node unlinked to the stream, since 1.6.0:3 */ - void (*peer_removed) (void *data, uint32_t id); }; /** Convert a stream state to a readable string */