On Wed, Oct 24, 2012 at 10:01 AM, Uros Bizjak <ubiz...@gmail.com> wrote:
>>> Additional test fails on alphaev68-linux-gnu: >>> >>> --- FAIL: TestPassFD (0.15 seconds) >>> passfd_test.go:62: FileConn: dup: Bad file descriptor >>> FAIL >>> FAIL: syscall >> >> As far as I can see this error message occurs when calling dup on the >> second file descriptor returned by socketpair. But I can't see why >> that would fail on Alpha. > > For some reason, the second dup on the same file descriptor fails. > Attached, please find strace dump, where: > > ... > gettimeofday({1351064744, 381316}, NULL) = 0 > gettimeofday({1351064744, 381316}, NULL) = 0 > gettimeofday({1351064744, 382293}, NULL) = 0 > gettimeofday({1351064744, 382293}, NULL) = 0 > gettimeofday({1351064744, 382293}, NULL) = 0 > dup(4) = 9 > osf_sigprocmask(SIG_BLOCK, []) = 0 (old mask []) > mmap(NULL, 24704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, > 0) = 0x20003076000 > mprotect(0x20003076000, 8192, PROT_NONE) = 0 > clone(child_stack=0x2000307ab70, > flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, > parent_tidptr=0x2000307b350, tls=0x2000307b970, > child_tidptr=0x2000307b350) = 21544 > fcntl(9, F_SETFD, FD_CLOEXEC) = 0 > osf_sigprocmask(SIG_BLOCK, []) = 0 (old mask []) > sigreturn() (mask [SYS STOP TSTP IO USR2]) = 0 > mmap(NULL, 24704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, > 0) = 0x2000307e000 > mprotect(0x2000307e000, 8192, PROT_NONE) = 0 > clone(child_stack=0x20003082b70, > flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, > parent_tidptr=0x20003083350, tls=0x20003083970, > child_tidptr=0x20003083350) = 21545 > futex(0x20000c4a450, FUTEX_WAIT, 0, NULL) = 0 > sigreturn() (mask [ILL ABRT FPE KILL BUS ALRM URG CONT IO XCPU]) = 0 > osf_sigprocmask(SIG_BLOCK, []) = 0 (old mask []) > futex(0xf84042b248, FUTEX_WAKE, 1) = 1 > wait4(21546, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, {ru_utime={0, > 51757}, ru_stime={0, 21484}, ...}) = 21546 > osf_sigprocmask(SIG_BLOCK, []) = 0 (old mask []) > close(9) = 0 > dup(4) = -1 EBADF (Bad file descriptor) > open("./a.out", O_RDONLY|O_CLOEXEC) = 3 > ... > > Is it OK to call dup on the same FD the second time? To answer my own question: dup(4) = 9 ... close(9) = 0 dup(4) = -1 EBADF (Bad file descriptor) Test is calling dup on a closed file descriptor. FD 4 and 9 share file status flags. Uros.