[Haskell-cafe] fcntl locks, executeFile and threaded runtime

Donn Cave donn at avvanta.com
Sat Oct 26 15:38:08 UTC 2013


Question about the syscall trace -- in the second, threaded version,

> [pid 11612] fcntl(7, F_SETLK, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}) = 0
...
> [pid 11612] +++ exited with 0 +++

?? In the not threaded version, I don't see the child process exit - and
wasn't expecting to, since it's supposed to have exec'd to /usr/bin/sleep.

	Donn
------------
> ghc -rtsopts --make test.hs; strace -f -e trace=fork,fcntl,dup,dup2,close -e signal=\!SIGVTALRM ./test >/dev/null
> close(3)                                = 0
> close(3)                                = 0
> close(3)                                = 0
> close(3)                                = 0
> close(3)                                = 0
> close(3)                                = 0
> close(3)                                = 0
> close(3)                                = 0
> close(3)                                = 0
> close(3)                                = 0
> Process 11591 attached
> [pid 11591] fcntl(3, F_SETLK, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}) = 0
> [pid 11591] close(4)                    = 0
> [pid 11591] close(4)                    = 0
> [pid 11591] close(4)                    = 0
> [pid 11590] fcntl(3, F_SETLK, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}) = -1 EAGAIN (Resource temporarily unavailable)
> test: setLock: resource exhausted (Resource temporarily unavailable)
> [pid 11590] +++ exited with 1 +++
> close(1)                                = 0
> close(2)                                = 0
> +++ exited with 0 +++
> 
> ghc -threaded -rtsopts --make test.hs; strace -f -e trace=fork,fcntl,dup,dup2,close -e signal=\!SIGVTALRM ./tes[23/96461]
> ll
> Linking test ...
> close(3)                                = 0
> close(3)                                = 0
> close(3)                                = 0
> close(3)                                = 0
> close(3)                                = 0
> close(3)                                = 0
> close(3)                                = 0
> close(3)                                = 0
> close(3)                                = 0
> close(3)                                = 0
> fcntl(3, F_SETFD, FD_CLOEXEC)           = 0
> fcntl(5, F_GETFL)                       = 0x1 (flags O_WRONLY)
> fcntl(5, F_SETFL, O_WRONLY|O_NONBLOCK)  = 0
> fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
> fcntl(5, F_SETFD, FD_CLOEXEC)           = 0
> Process 11610 attached
> [pid 11609] fcntl(6, F_GETFL)           = 0x2 (flags O_RDWR)
> [pid 11609] fcntl(6, F_SETFL, O_RDWR|O_NONBLOCK) = 0
> [pid 11609] fcntl(6, F_SETFD, FD_CLOEXEC) = 0
> Process 11611 attached
> Process 11612 attached
> [pid 11612] close(3)                    = 0
> [pid 11612] close(4)                    = 0
> [pid 11612] close(5)                    = 0
> [pid 11612] close(6)                    = 0
> [pid 11612] fcntl(3, F_SETFD, FD_CLOEXEC) = 0
> [pid 11612] fcntl(5, F_GETFL)           = 0x1 (flags O_WRONLY)
> [pid 11612] fcntl(5, F_SETFL, O_WRONLY|O_NONBLOCK) = 0
> [pid 11612] fcntl(4, F_SETFD, FD_CLOEXEC) = 0
> [pid 11612] fcntl(5, F_SETFD, FD_CLOEXEC) = 0
> Process 11613 attached
> [pid 11612] fcntl(6, F_GETFL)           = 0x2 (flags O_RDWR)
> [pid 11612] fcntl(6, F_SETFL, O_RDWR|O_NONBLOCK) = 0
> [pid 11612] fcntl(6, F_SETFD, FD_CLOEXEC) = 0
> [pid 11612] fcntl(7, F_SETLK, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}) = 0
> [pid 11613] +++ exited with 0 +++
> [pid 11612] close(3)                    = 0
> [pid 11612] close(3)                    = 0
> [pid 11612] close(3)                    = 0
> [pid 11609] fcntl(7, F_SETLK, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}) = 0
> [pid 11612] close(1)                    = 0
> [pid 11612] close(2)                    = 0
> [pid 11612] +++ exited with 0 +++
> [pid 11609] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=11612, si_status=0, si_utime=0, si_stime=0} ---
> [pid 11610] close(3)                    = 0
> [pid 11610] close(4)                    = 0
> [pid 11610] close(5)                    = 0
> [pid 11610] close(6)                    = 0
> [pid 11610] +++ exited with 0 +++
> [pid 11611] +++ exited with 0 +++
> +++ exited with 0 +++
> 
> At Fri, 25 Oct 2013 13:28:23 -0400,
> Brandon Allbery wrote:
> > 
> > [1  <multipart/alternative (7bit)>]
> > [1.1  <text/plain; UTF-8 (7bit)>]
> > 
> > [1.2  <text/html; UTF-8 (quoted-printable)>]
> > On Fri, Oct 25, 2013 at 1:20 PM, Donn Cave <donn at avvanta.com> wrote:
> > 
> >     >
> >     > On Fri, Oct 25, 2013 at 11:52 AM, Donn Cave <donn at avvanta.com> wrote:
> >     >
> >     >> But I don't see how executeFile could
> >     >> make any difference, in that scenario.
> >     >
> >     > Look for fcntl(fd, FD_CLOEXEC, 1) calls?
> >    
> >     Oh, that would be heinous!
> > 
> > It would be because I got that completely wrong. fcntl(fd, F_SETFD, FD_CLOEXEC). sigh.
> > 
> > --
> > brandon s allbery kf8nh                sine nomine associates
> > allbery.b at gmail.com                 Âballbery at sinenomine.net
> > unix, openafs, kerberos, infrastructure, xmonad    Âhttp://sinenomine.net
> > 
> > 
> > [2  <text/plain; us-ascii (7bit)>]
> > _______________________________________________
> > Haskell-Cafe mailing list
> > Haskell-Cafe at haskell.org
> > http://www.haskell.org/mailman/listinfo/haskell-cafe
> 
> 


More information about the Haskell-Cafe mailing list