diff mbox series

[BlueZ,v1,2/2] transport: Print owner information when it exit or release

Message ID 20240117222317.1792594-2-luiz.dentz@gmail.com
State Superseded
Headers show
Series [BlueZ,v1,1/2] client/player: Add support for printing A2DP codec details | expand

Commit Message

Luiz Augusto von Dentz Jan. 17, 2024, 10:23 p.m. UTC
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This prints the owner name when it exits/quits/crash or releases a
transport.
---
- Looks like there is a bug/race on codec switch it appears the likes of
  pipewire attempts to call Release in the process which stops the
  acquire/resume:

  bluetoothd[1774429]: profiles/audio/transport.c:transport_set_state() State
  changed /org/bluez/hci0/dev_94_DB_56_F7_F2_88/sep1/fd8: TRANSPORT_G
  bluetoothd[1774429]: profiles/audio/transport.c:media_request_create()
  Request created: method=Acquire id=50
  bluetoothd[1774429]: profiles/audio/transport.c:media_owner_add() Owner
  :1.133105 Request Acquire
  bluetoothd[1774429]: profiles/audio/transport.c:media_transport_set_owner()
  Transport /org/bluez/hci0/dev_94_DB_56_F7_F2_88/sep1/fd8 Owner :1.5
  bluetoothd[1774429]: profiles/audio/transport.c:release() Owner :1.133105
  bluetoothd[1774429]: profiles/audio/transport.c:media_owner_remove() Owner
  :1.133105 Request Acquire

 profiles/audio/transport.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Luiz Augusto von Dentz Jan. 17, 2024, 10:36 p.m. UTC | #1
Hi Pauli,

On Wed, Jan 17, 2024 at 5:23 PM Luiz Augusto von Dentz
<luiz.dentz@gmail.com> wrote:
>
> From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
>
> This prints the owner name when it exits/quits/crash or releases a
> transport.
> ---
> - Looks like there is a bug/race on codec switch it appears the likes of
>   pipewire attempts to call Release in the process which stops the
>   acquire/resume:
>
>   bluetoothd[1774429]: profiles/audio/transport.c:transport_set_state() State
>   changed /org/bluez/hci0/dev_94_DB_56_F7_F2_88/sep1/fd8: TRANSPORT_G
>   bluetoothd[1774429]: profiles/audio/transport.c:media_request_create()
>   Request created: method=Acquire id=50
>   bluetoothd[1774429]: profiles/audio/transport.c:media_owner_add() Owner
>   :1.133105 Request Acquire
>   bluetoothd[1774429]: profiles/audio/transport.c:media_transport_set_owner()
>   Transport /org/bluez/hci0/dev_94_DB_56_F7_F2_88/sep1/fd8 Owner :1.5
>   bluetoothd[1774429]: profiles/audio/transport.c:release() Owner :1.133105
>   bluetoothd[1774429]: profiles/audio/transport.c:media_owner_remove() Owner
>   :1.133105 Request Acquire

I wonder if we have a regression on BlueZ or PW for A2DP, since I
recall this used to work just fine while switching codecs back and
forth, but today it didn't work at all for me and I had to reconnect a
couple of times to get it working:

>pipewire --version
pipewire
Compiled with libpipewire 1.0.0
Linked with libpipewire 1.0.0

pw.node: (bluez_output.94_DB_56_F7_F2_88.1-70) running -> error
(Received error event)

>  profiles/audio/transport.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
> index a4696154aba5..5395985b990f 100644
> --- a/profiles/audio/transport.c
> +++ b/profiles/audio/transport.c
> @@ -531,6 +531,8 @@ static void media_owner_exit(DBusConnection *connection, void *user_data)
>  {
>         struct media_owner *owner = user_data;
>
> +       DBG("Owner %s", owner->name);
> +
>         owner->watch = 0;
>
>         media_owner_remove(owner);
> @@ -742,6 +744,8 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
>         if (owner == NULL || g_strcmp0(owner->name, sender) != 0)
>                 return btd_error_not_authorized(msg);
>
> +       DBG("Owner %s", owner->name);
> +
>         if (owner->pending) {
>                 const char *member;
>
> --
> 2.43.0

It seems you PW calls Release after Acquire, not sure if it didn't
like our response to Acquire or something.
Pauli Virtanen Jan. 20, 2024, 6:40 p.m. UTC | #2
Hi,

ke, 2024-01-17 kello 17:36 -0500, Luiz Augusto von Dentz kirjoitti:
> On Wed, Jan 17, 2024 at 5:23 PM Luiz Augusto von Dentz
> <luiz.dentz@gmail.com> wrote:
> > 
> > From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
> > 
> > This prints the owner name when it exits/quits/crash or releases a
> > transport.
> > ---
> > - Looks like there is a bug/race on codec switch it appears the likes of
> >   pipewire attempts to call Release in the process which stops the
> >   acquire/resume:
> > 
> >   bluetoothd[1774429]: profiles/audio/transport.c:transport_set_state() State
> >   changed /org/bluez/hci0/dev_94_DB_56_F7_F2_88/sep1/fd8: TRANSPORT_G
> >   bluetoothd[1774429]: profiles/audio/transport.c:media_request_create()
> >   Request created: method=Acquire id=50
> >   bluetoothd[1774429]: profiles/audio/transport.c:media_owner_add() Owner
> >   :1.133105 Request Acquire
> >   bluetoothd[1774429]: profiles/audio/transport.c:media_transport_set_owner()
> >   Transport /org/bluez/hci0/dev_94_DB_56_F7_F2_88/sep1/fd8 Owner :1.5
> >   bluetoothd[1774429]: profiles/audio/transport.c:release() Owner :1.133105
> >   bluetoothd[1774429]: profiles/audio/transport.c:media_owner_remove() Owner
> >   :1.133105 Request Acquire
> 
> I wonder if we have a regression on BlueZ or PW for A2DP, since I
> recall this used to work just fine while switching codecs back and
> forth, but today it didn't work at all for me and I had to reconnect a
> couple of times to get it working:
> 
> > pipewire --version
> pipewire
> Compiled with libpipewire 1.0.0
> Linked with libpipewire 1.0.0

I don't think there are any recent related changes on Pipewire side
recently. I've also not been able to reproduce the above (w/ bluez 5.72
or current master) or seen other similar reports. Maybe there is some
old bug that surfaces only in some cases.
diff mbox series

Patch

diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index a4696154aba5..5395985b990f 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -531,6 +531,8 @@  static void media_owner_exit(DBusConnection *connection, void *user_data)
 {
 	struct media_owner *owner = user_data;
 
+	DBG("Owner %s", owner->name);
+
 	owner->watch = 0;
 
 	media_owner_remove(owner);
@@ -742,6 +744,8 @@  static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
 	if (owner == NULL || g_strcmp0(owner->name, sender) != 0)
 		return btd_error_not_authorized(msg);
 
+	DBG("Owner %s", owner->name);
+
 	if (owner->pending) {
 		const char *member;