pipewire/spa/plugins
Hans de Goede 17e6d88a6e spa: v4l2: call start_monitor() before enum_devices()
This fixes 2 races wrt probing v4l2 devices:

1. Before this change there was a window where a new udev device can get
added between the udev_enumerate_scan_devices() call in enum_devices() and
the udev_monitor_enable_receiving(this->umonitor); call. If this window was
hit then enum_devices() would not see the device and no udev-event for it
would be received either causing the device to not be seen.

Enabling udev event monitoring before calling udev_enumerate_scan_devices()
fixes this. Note that the code is already prepared to deal with getting
multiple add/change events for the same udev device, so hitting the new
race window where PipeWire may receive both an add- or change-event and
also sees + probes the device from enum_devices() is not a problem.

2. Before this change devices added by enum_devices() would not have
inotify monitoring activated right away because notify.fd = -1 at this
time turning start_watching_device() into a no-op.

These devices without inotify monitoring would then have their access
checked by process_device() calling check_access().

Then after all devices have been enumerated start_monitor() would call
start_inotify() which calls start_watching_device() for all devices added
by enum_devices(). This leaves a window where the ACL can change without
there being an inotify watch for it.

Calling start_monitor() before enum_devices() puts start_inotify()
notify before enum_devices() so that the add_device() calls done
by enum_devices() will now successfully call start_watching_device()
closing this window.

PipeWire is somewhat likely to not notify ACL changes because of this
because PipeWire is part of the systemd user default.target, where as
logind only starts applying the ACLs after GNOME has created the seat
for the GNOME session. So on first login we have PipeWire starting
and logind applying the ACLs at the same time, which allows for the ACL
change to hit the small race window where PipeWire is not monitoring
for ACL changes. Fixing this second race should hopefully resolve
issue #3960.

Closes: #3960
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
(cherry picked from commit 584168caab)
2024-10-12 15:19:49 +02:00
..
aec aec: support both webrtc versions 2023-09-14 15:35:40 +02:00
alsa spa: alsa: react to "new" udev action as well 2024-10-12 15:19:49 +02:00
audioconvert audioadapter: recheck formats when EnumFormat changes 2024-09-17 11:18:43 +02:00
audiomixer audioconvert: avoid unaligned writes and left shift of neagtives 2023-10-15 21:12:23 +02:00
audiotestsrc node: update the duration/rate from the target 2023-03-23 18:39:27 +01:00
avb spa: small cleanups 2024-01-12 12:14:06 +01:00
bluez5 bluez5: backend-native: Handle AT+CCWA command 2024-09-17 11:35:54 +02:00
control tweak number of buffers 2023-10-13 14:00:29 +02:00
ffmpeg treewide: use SPDX tags to specify copyright information 2023-02-16 10:54:48 +00:00
jack tweak number of buffers 2023-10-13 14:00:29 +02:00
libcamera meson: fix build with missing libudev-devel 2024-10-12 15:19:49 +02:00
support journal: prepend code location to messages at debug log levels 2024-04-29 16:30:06 +02:00
test spa: deduplicate test-helper.h 2023-10-15 16:20:17 +00:00
v4l2 spa: v4l2: call start_monitor() before enum_devices() 2024-10-12 15:19:49 +02:00
videoconvert spa: remove unnecessary indirection for some spa_log_topics 2023-10-06 13:08:24 +00:00
videotestsrc videotestsrc: implement impl_node_set_io to fix segfault while loading 2023-10-26 15:54:10 +02:00
volume volume: Fix inverted check for buffer validity 2023-03-31 08:19:07 +00:00
vulkan vulkan: fix uninitialized writeDescriptor 2023-08-31 10:08:06 +00:00
meson.build meson: fix build with missing libudev-devel 2024-10-12 15:19:49 +02:00