1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-28 00:21:52 +03:00

Assume that SOCK_CLOEXEC is available and works

This fixes (harmless) data races when accessing the various
__have_sock_cloexec variables.
This commit is contained in:
Florian Weimer
2015-10-17 12:02:37 +02:00
parent f546f87c4f
commit 52fb79d6cd
11 changed files with 33 additions and 232 deletions

View File

@ -346,36 +346,9 @@ openlog_internal(const char *ident, int logstat, int logfac)
(void)strncpy(SyslogAddr.sun_path, _PATH_LOG,
sizeof(SyslogAddr.sun_path));
if (LogStat & LOG_NDELAY) {
#ifdef SOCK_CLOEXEC
# ifndef __ASSUME_SOCK_CLOEXEC
if (__have_sock_cloexec >= 0) {
# endif
LogFile = __socket(AF_UNIX,
LogType
| SOCK_CLOEXEC, 0);
# ifndef __ASSUME_SOCK_CLOEXEC
if (__have_sock_cloexec == 0)
__have_sock_cloexec
= ((LogFile != -1
|| errno != EINVAL)
? 1 : -1);
}
# endif
#endif
#ifndef __ASSUME_SOCK_CLOEXEC
# ifdef SOCK_CLOEXEC
if (__have_sock_cloexec < 0)
# endif
LogFile = __socket(AF_UNIX, LogType, 0);
#endif
if (LogFile == -1)
return;
#ifndef __ASSUME_SOCK_CLOEXEC
# ifdef SOCK_CLOEXEC
if (__have_sock_cloexec < 0)
# endif
__fcntl(LogFile, F_SETFD, FD_CLOEXEC);
#endif
LogFile = __socket(AF_UNIX, LogType | SOCK_CLOEXEC, 0);
if (LogFile == -1)
return;
}
}
if (LogFile != -1 && !connected)