mirror of
https://github.com/brl/mutter.git
synced 2024-12-26 21:02:14 +00:00
tests/screen-cast-client: Don't process stream on tear down
We'd get a re-entry like scenario when destroying the PipeWire stream object, where PipeWire would call the stream process vfunc. When this happened, we had already destroyed the stream, so don't try to dequeue or anything, just do an early exit. Fixes the following crash in the test case client: #0 pw_stream_dequeue_buffer() in /usr/lib64/libpipewire-0.3.so.0.367.0 #1 on_stream_process() at ../src/tests/screen-cast-client.c:348 #2 do_call_process() in /usr/lib64/libpipewire-0.3.so.0.367.0 #3 flush_items() in /usr/lib64/spa-0.2/support/libspa-support.so #4 loop_invoke() in /usr/lib64/spa-0.2/support/libspa-support.so #5 impl_send_command.lto_priv.0() in /usr/lib64/libpipewire-0.3.so.0.367.0 #6 suspend_node.lto_priv.0() in /usr/lib64/libpipewire-0.3.so.0.367.0 #7 pw_impl_node_set_state() in /usr/lib64/libpipewire-0.3.so.0.367.0 #8 client_node_removed() in /usr/lib64/pipewire-0.3/libpipewire-module-client-node.so #9 pw_proxy_destroy() in /usr/lib64/libpipewire-0.3.so.0.367.0 #10 pw_stream_disconnect() in /usr/lib64/libpipewire-0.3.so.0.367.0 #11 pw_stream_destroy() in /usr/lib64/libpipewire-0.3.so.0.367.0 #12 stream_free() at ../src/tests/screen-cast-client.c:530 #13 main() at ../src/tests/screen-cast-client.c:803 #14 __libc_start_call_main() at ../sysdeps/nptl/libc_start_call_main.h:58 #15 __libc_start_main() at ../csu/libc-start.c:360 #16 _start() in /home/jonas/Dev/gnome/mutter/build/src/tests/mutter-screen-cast-client Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3095>
This commit is contained in:
parent
6b9efc3b0c
commit
c724fcae2e
@ -345,6 +345,9 @@ on_stream_process (void *user_data)
|
|||||||
struct pw_buffer *next_buffer;
|
struct pw_buffer *next_buffer;
|
||||||
struct pw_buffer *buffer = NULL;
|
struct pw_buffer *buffer = NULL;
|
||||||
|
|
||||||
|
if (!stream->pipewire_stream)
|
||||||
|
return;
|
||||||
|
|
||||||
next_buffer = pw_stream_dequeue_buffer (stream->pipewire_stream);
|
next_buffer = pw_stream_dequeue_buffer (stream->pipewire_stream);
|
||||||
if (next_buffer)
|
if (next_buffer)
|
||||||
g_debug ("Dequeued buffer, queue previous");
|
g_debug ("Dequeued buffer, queue previous");
|
||||||
|
Loading…
Reference in New Issue
Block a user