All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: How to close ALSA device nodes?
@ 2009-10-18 17:38 Rémi Denis-Courmont
  2009-10-22 22:55 ` Daniel Yek
  2009-10-23 18:51 ` How to close ALSA device nodes? / ALSA's fds Daniel Yek
  0 siblings, 2 replies; 9+ messages in thread
From: Rémi Denis-Courmont @ 2009-10-18 17:38 UTC (permalink / raw)
  To: alsa-devel

Le dimanche 18 octobre 2009 20:13:15 Robert Hancock, vous avez écrit :
> > From the earlier thread, I reckon that ALSA developers consider that this
> > is an upper-layer issue. Maybe so, but then how is the upper-layer
> > supposed to find which file descriptors ALSA-lib has opened - if any?
> > Conversely, if ALSA- lib won't tell while file descriptors it is using,
> > what could possibly be the use case for not closing those on exec?
> 
> I agree that it's a difficult problem for an app that wants to fork
> and exec another process.. I'd think really should be some way for an
> app to control the CLOEXEC flag for the file descriptors that alsa-lib
> has open..

Right. The kernel recently introduced the O_CLOEXEC open flag, to support 
thread-safe close-on-exec.  The only way to leverage this is for ALSA-lib to 
set close-on-exec itself when it opens a file (whether by default or when the 
application requests it).

That said, I still fail to see any potential use case to not set the flag. 
Since ALSA-lib won't let the application know about the file handles, any 
application cannot a use them across exec() in the first place. For the 
reference, glibc is now setting close-on-exec in similar cases, e.g. syslog().

> I guess the alternative would be to shutdown all open PCMs, etc. in
> ALSA in the child process after forking and before the exec, so that
> they don't end up still open for the new process..

I suspect such an approach would be painful both for ALSA and for the 
applications. From ALSA, this would need safety with regards to fork in 
another thread. That probably requires pthread_atfork() *glurp* if ALSA is to 
keep its SMP & thread-safety promise *ouch*. From the application, this 
require calling an ALSA function between fork and exec. That would forbid 
using system(), popen() or -faster- posix_spawn*(). That also means linking to 
ALSA in every place that executes. Considering that VLC is heavily plugin-
based, this would be so impractical that I'd even rather scan through 
/proc/self/fd...

-- 
Rémi Denis-Courmont
http://git.remlab.net/cgi-bin/gitweb.cgi?p=vlc-courmisch.git;a=summary
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 9+ messages in thread
* How to close ALSA device nodes?
@ 2009-10-18 16:06 Rémi Denis-Courmont
  2009-10-18 17:13 ` Robert Hancock
  0 siblings, 1 reply; 9+ messages in thread
From: Rémi Denis-Courmont @ 2009-10-18 16:06 UTC (permalink / raw)
  To: alsa-devel

	Hello,

I'm getting a bug report against VLC media player whereby ALSA sound output 
stops working when the screensaver is inhibited. It turns out that VLC is 
leaking any file descriptor open through ALSA-lib into child processes. The 
exact same issue was already raised by mplayer... 6 years ago:
http://www.mail-archive.com/alsa-devel@lists.sourceforge.net/msg06249.html

In other cases (V4L, OSS, DVB, DVD, sockets, even regular files...), VLC would 
open the device nodes with O_CLOEXEC flag (if supported by kernel and libc) 
and fallback to setting FD_CLOEXEC via fcntl(). Then the descriptor is 
automatically, and in the earlier case, thread-safely, closed whenever VLC -
forks and- execs. With ALSA-lib, I cannot figure any way to achieve that...

From the earlier thread, I reckon that ALSA developers consider that this is 
an upper-layer issue. Maybe so, but then how is the upper-layer supposed to 
find which file descriptors ALSA-lib has opened - if any? Conversely, if ALSA-
lib won't tell while file descriptors it is using, what could possibly be the 
use case for not closing those on exec?

Best regards,

-- 
Rémi Denis-Courmont
http://www.remlab.net/
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 9+ messages in thread
* How to close ALSA device nodes?
@ 2009-10-18 16:02 Rémi Denis-Courmont
  0 siblings, 0 replies; 9+ messages in thread
From: Rémi Denis-Courmont @ 2009-10-18 16:02 UTC (permalink / raw)
  To: alsa-devel; +Cc: vlc-devel

	Hello,

I'm getting a bug report against VLC media player whereby ALSA sound output 
stops working when the screensaver is inhibited. It turns out that VLC is 
leaking any file descriptor open through ALSA-lib into child processes. The 
exact same issue was already raised by mplayer... 6 years ago:
http://www.mail-archive.com/alsa-devel@lists.sourceforge.net/msg06249.html

In other cases (V4L, OSS, DVB, DVD, sockets, even regular files...), VLC would 
open the device nodes with O_CLOEXEC flag (if supported by kernel and libc) 
and fallback to setting FD_CLOEXEC via fcntl(). Then the descriptor is 
automatically, and in the earlier case, thread-safely, closed whenever VLC -
forks and- execs. With ALSA-lib, I cannot figure any way to achieve that...

From the earlier thread, I reckon that ALSA developers consider that this is 
an upper-layer issue. Maybe so, but then how is the upper-layer supposed to 
find which file descriptors ALSA-lib has opened - if any? Conversely, if ALSA-
lib won't tell while file descriptors it is using, what could possibly be the 
use case for not closing those on exec?

Best regards,

-- 
Rémi Denis-Courmont
http://www.remlab.net/
_______________________________________________
vlc-devel mailing list
To unsubscribe or modify your subscription options:
http://mailman.videolan.org/listinfo/vlc-devel

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2009-10-24 14:37 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-18 17:38 How to close ALSA device nodes? Rémi Denis-Courmont
2009-10-22 22:55 ` Daniel Yek
2009-10-23  9:49   ` Rémi Denis-Courmont
2009-10-23 16:44     ` Surrogate Parent Model / " Daniel Yek
2009-10-23 18:51 ` How to close ALSA device nodes? / ALSA's fds Daniel Yek
2009-10-24 14:37   ` Rémi Denis-Courmont
  -- strict thread matches above, loose matches on Subject: below --
2009-10-18 16:06 How to close ALSA device nodes? Rémi Denis-Courmont
2009-10-18 17:13 ` Robert Hancock
2009-10-18 16:02 Rémi Denis-Courmont

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.