Sfoglia il codice sorgente

workaround bug in linux dup2

the linux documentation for dup2 says it can fail with EBUSY due to a
race condition with open and dup in the kernel. shield applications
(and the rest of libc) from this nonsense by looping until it succeeds
Rich Felker 14 anni fa
parent
commit
f9a6372a98
1 ha cambiato i file con 4 aggiunte e 1 eliminazioni
  1. 4 1
      src/unistd/dup2.c

+ 4 - 1
src/unistd/dup2.c

@@ -1,7 +1,10 @@
 #include <unistd.h>
+#include <errno.h>
 #include "syscall.h"
 
 int dup2(int old, int new)
 {
-	return syscall(SYS_dup2, old, new);
+	int r;
+	while ((r=__syscall(SYS_dup2, old, new))==-EBUSY);
+	return __syscall_ret(r);
 }