Open device nodes with close-on-exec flag

Signed-off-by: Rémi Denis-Courmont <remi@remlab.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Rémi Denis-Courmont 2009-11-07 21:29:23 +02:00 committed by Takashi Iwai
parent ef2d3cf747
commit 8264b2fd0a

View file

@ -230,22 +230,28 @@ extern snd_lib_error_handler_t snd_err_msg;
# define link_warning(symbol, msg)
#endif
/* open with resmgr */
#ifdef SUPPORT_RESMGR
static inline int snd_open_device(const char *filename, int fmode)
{
int fd = open(filename, fmode);
if (fd >= 0)
return fd;
if (errno == EAGAIN || errno == EBUSY)
return fd;
if (! access(filename, F_OK))
return rsm_open_device(filename, fmode);
return -1;
}
#else
#define snd_open_device(filename, fmode) open(filename, fmode);
int fd;
#ifdef O_CLOEXEC
fmode |= O_CLOEXEC;
#endif
fd = open(filename, fmode);
/* open with resmgr */
#ifdef SUPPORT_RESMGR
if (fd < 0) {
if (errno == EAGAIN || errno == EBUSY)
return fd;
if (! access(filename, F_OK))
fd = rsm_open_device(filename, fmode);
}
#endif
if (fd >= 0)
fcntl(fd, F_SETFD, FD_CLOEXEC);
return fd;
}
/* make local functions really local */
#define snd_dlobj_cache_lookup \