This patch replaces the current implementation that uses a global bcast_pa_requests queue and instead creates a queue and a timer for each adapter. The queue for a specific adapter, the timer's id and the adapter's id form a new struct called pa_timer_data. For each adapter a new instance of this struct is created and inserted into the global queue, pa_timers. Operations on the old bcast_pa_requests queue have been modified such that: 1) based on the adapter_id, the correct entry in the pa_timers queue is retrieved 2) the operation can be called on the bcast_pa_requests queue from the resulting pa_timer_data instance The timers are created and stopped on a per adapter basis. A timer is stopped if the adapter's pa_req queue is empty. A pa_timer_id equal to 0 means that the timer is stopped. The bap_bcast_remove function has been updated to remove from the pa_req queue entries of devices that were freed. pa_req that are already in progress are treated by the bap_data_free function. This patch also fixes a crash that occurs when a device is freed before the pa_idle_timer handles it's entry in the pa_req queue. The following log was obtained while running an Unicast setup: ==105052==ERROR: AddressSanitizer: heap-use-after-free on address 0x60400001c418 at pc 0x55775caf1846 bp 0x7ffc83d9fb90 sp 0x7ffc83d9fb80 READ of size 8 at 0x60400001c418 thread T0 0 0x55775caf1845 in btd_service_get_device src/service.c:325 1 0x55775ca03da2 in short_lived_pa_sync profiles/audio/bap.c:2693 2 0x55775ca03da2 in pa_idle_timer profiles/audio/bap.c:1996 Vlad Pruteanu (1): bap: Replace global bcast_pa_requests with a queue for each adapter profiles/audio/bap.c | 115 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 97 insertions(+), 18 deletions(-) -- 2.40.1