for dup2 in case another thread races with the current one. Retry
in this case.
2007-10-04 Ulrich Drepper <drepper@redhat.com>
+ * login/login_tty.c (login_tty): The Linux kernel can return EBUSY
+ for dup2 in case another thread races with the current one. Retry
+ in this case.
+
* misc/error.h: Remove support for use outside of libc. We have to
include <features.h> now. Include <bits/error.h> if possible.
* misc/bits/error.h: New file.
static char sccsid[] = "@(#)login_tty.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
+#include <errno.h>
#include <sys/param.h>
#include <sys/ioctl.h>
#include <unistd.h>
}
}
#endif
- (void) dup2(fd, 0);
- (void) dup2(fd, 1);
- (void) dup2(fd, 2);
+ while (dup2(fd, 0) == -1 && errno == EBUSY)
+ ;
+ while (dup2(fd, 1) == -1 && errno == EBUSY)
+ ;
+ while (dup2(fd, 2) == -1 && errno == EBUSY)
+ ;
if (fd > 2)
(void) close(fd);
return (0);