From: "Frédéric DALLEAU" <frederic.dalleau@palmsource.com>
To: BlueZ development <bluez-devel@lists.sourceforge.net>
Subject: Re: [Bluez-devel] a2dpd: cmdplay fails: "No such application: 'amarok player play'"
Date: Mon, 15 Jan 2007 17:43:55 +0100 [thread overview]
Message-ID: <45ABAF4B.6050702@palmsource.com> (raw)
In-Reply-To: <45AB9C88.1040808@xmission.com>
Brad,
I already tried system here and this led to strange interactions between =
processes. I just tried it again (in case it would be better) and it is =
still the same.
Here is the procedure to reproduce :
- xmms must not be started.
- start a2dpd.
- then from an avrcp headset press play to connect : xmms will start.
- kill a2dpd : xmms will deadlock.
Any player should behave the same. I found that the a2dpd main unix =
socket must be closed immediatly after any fork(). I suspect the socket =
remain open in the xmms process space which will try to write to an open =
socket that is no longer polled for data, thus deadlock (btw, can any =
linux guru confirm?). Any process started by system() will be forked but =
this socket won't be closed.
More over, the execution must be asynchronous, system("xmms") will wait =
until you terminate xmms before returning, system("xmms &") should work.
It is still possible to fork() then close_server_socket() then system() =
as did Robert, but a shell is spawned for that (+ 2 additionnal fork =
calls!) which is a few megabytes that could be used better...
It should be enough to rewrite the parser code just before so it handles =
more parameters.
char* argv[2];
strncpy(command, cmd, sizeof(command));
command[sizeof(command)-1]=3D '\0';
argv[0] =3D strchr(command, ' ');
if(argv[0]) { *argv[0]=3D'\0'; argv[0]++; }
I stay open to any other solutions if this limitation is a real problem, =
but as stated in amarok man page :
Options:
-r, --previous
Skip backwards in playlist
-p, --play
Start playing current playlist
-s, --stop
Stop playback
--pause
Pause playback
-f, --next
Skip forwards in playlist
Fr=E9d=E9ric
Brad Midgley a =E9crit :
> Robert
>
> this idea looks ok. The extra fork() could be removed.
>
> Brad
>
> =
>> Index: a2dpd_ipc.c
>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>> RCS file: /cvsroot/bluetooth-alsa/plugz/alsa-plugins/a2dpd/a2dpd_ipc.c,v
>> retrieving revision 1.3
>> diff -u -r1.3 a2dpd_ipc.c
>> --- a2dpd_ipc.c 12 Jan 2007 16:34:01 -0000 1.3
>> +++ a2dpd_ipc.c 15 Jan 2007 02:02:15 -0000
>> @@ -384,8 +384,10 @@
>> close_server_socket_on_fork();
>>
>> // Replace children with new process
>> - i =3D execlp(command, command, argv[0],=
NULL);
>> - DBG("execlp failed %s=3D%d (errno=3D%d:=
%s)", cmd, =
>> i, errno, strerror(errno));
>> + system(cmd);
>> + exit(0);
>> break;
>> case -1:
>> // failed
>> =
>
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share y=
our
> opinions on IT & business topics through brief surveys - and earn cash
> http://www.techsay.com/default.php?page=3Djoin.php&p=3Dsourceforge&CID=3D=
DEVDEV
> _______________________________________________
> Bluez-devel mailing list
> Bluez-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bluez-devel
> =
-- =
Frederic
Without the wind, the grass does not move.
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=3Djoin.php&p=3Dsourceforge&CID=3DDE=
VDEV
_______________________________________________
Bluez-devel mailing list
Bluez-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bluez-devel
next prev parent reply other threads:[~2007-01-15 16:43 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-15 2:05 [Bluez-devel] a2dpd: cmdplay fails: "No such application: 'amarok player play'" Robert Huitl
2007-01-15 10:16 ` Frédéric DALLEAU
2007-01-23 19:20 ` Michel Brabants
2007-01-24 10:48 ` Frédéric DALLEAU
2007-01-25 19:02 ` Michel Brabants
2007-01-15 15:23 ` Brad Midgley
2007-01-15 16:43 ` Frédéric DALLEAU [this message]
2007-01-16 3:43 ` Brad Midgley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=45ABAF4B.6050702@palmsource.com \
--to=frederic.dalleau@palmsource.com \
--cc=bluez-devel@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox