mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2026-02-21 01:40:34 -05:00
A call to `release_buffer()` may happen in a gstreamer thread concurrently
with the pipewire stream emitting the `remove_buffer` event in the thread
loop, which, in pipewiresink calls `gst_pipewire_pool_remove_buffer()`, which
in turn modifies the `GstPipeWirePoolData` object. Thus a data race occurs
when accessing its members, which can lead to `pw_stream_return_buffer()`
being called with a null pointer.
Fix that by locking the thread loop before checking the conditions.
Fixes:
|
||
|---|---|---|
| .. | ||
| .editorconfig | ||
| gstpipewire.c | ||
| gstpipewireclock.c | ||
| gstpipewireclock.h | ||
| gstpipewirecore.c | ||
| gstpipewirecore.h | ||
| gstpipewiredeviceprovider.c | ||
| gstpipewiredeviceprovider.h | ||
| gstpipewireformat.c | ||
| gstpipewireformat.h | ||
| gstpipewirepool.c | ||
| gstpipewirepool.h | ||
| gstpipewiresink.c | ||
| gstpipewiresink.h | ||
| gstpipewiresrc.c | ||
| gstpipewiresrc.h | ||
| gstpipewirestream.c | ||
| gstpipewirestream.h | ||
| meson.build | ||