1. 09 Jun, 2022 2 commits
    • Wim Taymans's avatar
      0.3.52 · 31bf6310
      Wim Taymans authored
    • Barnabás Pőcze's avatar
      pulse-server: destroy modules first · c8c2526f
      Barnabás Pőcze authored
      The `impl::servers` list contains all servers, and they are all
      destroyed in `impl_clear()`. However, by that time, modules were
      not freed previously, so if there were any instances of
      *module-protocol-native-tcp* loaded, then the unload() method
      of those would call `server_free()` on already freed servers,
      resulting in use-after-frees. Fix that by unloading modules
      before destroying the servers.
      ==451490==ERROR: AddressSanitizer: heap-use-after-free on address 0x612000006050 ...
      READ of size 8 at 0x612000006050 thread T0
          #0 0x7f45edb19a0c in server_free ../src/modules/module-protocol-pulse/server.c:1022
          #1 0x7f45edb46c7d in module_native_protocol_tcp_unload ../src/modules/module-protocol-pulse/modules/module-native-protocol-tcp.c:66
          #2 0x7f45eda893c7 in module_unload ../src/modules/module-protocol-pulse/module.c:128
          #3 0x7f45edaf7269 in impl_unload_module ../src/modules/module-protocol-pulse/pulse-server.c:5336
          #4 0x7f45edaa1583 in pw_map_for_each ../src/pipewire/map.h:238
          #5 0x7f45edaf79c5 in impl_clear ../src/modules/module-protocol-pulse/pulse-server.c:5358
      0x612000006050 is located 16 bytes inside of 264-byte region [0x612000006040,0x612000006148)
      freed by thread T0 here:
          #0 0x7f45f30be672 in __interceptor_free /usr/src/debug/gcc/libsanitizer/asan/asan_malloc_linux.cpp:52
          #1 0x7f45edb1a48a in server_free ../src/modules/module-protocol-pulse/server.c:1040
          #2 0x7f45edaf730b in impl_clear ../src/modules/module-protocol-pulse/pulse-server.c:5347
      Fixes: f181210b ("pulse-server: properly unload modules")
  2. 08 Jun, 2022 5 commits
  3. 07 Jun, 2022 1 commit
    • P V's avatar
      bluez5: disable dummy avrcp player by default · 5b429607
      P V authored
      It causes some headsets behave strangely. See #2391,
      The BlueZ issue of AVRCP volume sometimes missing that this worked
      around was fixed in recent versions. The issue of some headsets not
      sending volume without AVRCP player remains, but it appears this breaks
      more headsets than fixes.
  4. 06 Jun, 2022 8 commits
  5. 05 Jun, 2022 5 commits
    • P V's avatar
      bluez5: don't consider profiles the adapter doesn't have · 8898a6a8
      P V authored and Wim Taymans's avatar Wim Taymans committed
      Don't try to reconnect or wait for profiles, which cannot be connected
      because the adapter doesn't have the counterpart sink/source profile.
      E.g. we should not reconnect/wait for HFP HF on remote device, if
      we don't have the corresponding HFP AG.
    • P V's avatar
      bluez5: a2dp-sink: address A2DP transport acquire failure mode · 8383ee85
      P V authored and Wim Taymans's avatar Wim Taymans committed
      If A2DP remote does not acquire its pending transport within a timeout,
      we won't get a write error in a2dp-sink, but instead the transport
      becomes idle.  Currently, we continue writing to the socket as if
      everything was fine, even though the data won't be processed at the
      remote end.
      Handle this by stopping the node and emitting a node error event.
      Pipewire may then restart the node to retry.
    • P V's avatar
      audioconvert: forward follower node errors · fc4f831a
      P V authored and Wim Taymans's avatar Wim Taymans committed
      If the follower of the adapter emits an error event, the adapter needs
      to forward it to upper levels so that they know the node has errored,
      and handle the situation.
    • Barnabás Pőcze's avatar
      pulse-server: module-switch-on-connect: remove dead code and one allocation · c2480915
      Barnabás Pőcze authored and Wim Taymans's avatar Wim Taymans committed
      As Coverity correctly points out, the `if (blocklist)` condition
      is never true after the `out` label, so this commit makes some
      changes to remove the dead code.
      First of all, the `regex_t` object is directly embedded in the
      module's data struct, so the `malloc()` call can be removed,
      and thus there is no need for the cleanup code anymore, so everything
      after the `out` label is also removed.
      Furthermore, two NULL checks are removed which check `d->blocklist`
      from `module_switch_on_connect_unload()` and `manager_added()`
      because both of those functions can only ever run if the `d->blocklist`
      regex object has been successfully initialized in `module_switch_on_connect_prepare()`.
      Those checks were not strictly needed to begin with.
    • P V's avatar
      bluez5: check decode/encode capability also at registering · 8949d45c
      P V authored and Wim Taymans's avatar Wim Taymans committed
      Endpoints without decode/encode capability are skipped in the object
      manager, but we should also skip them in the registration calls (even
      though in practice this doesn't appear to matter).
  6. 04 Jun, 2022 7 commits
  7. 03 Jun, 2022 11 commits
  8. 02 Jun, 2022 1 commit