octave-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Octave-bug-tracker] [bug #34750] Plotting Hangs on OpenBSD


From: Edd Barrett
Subject: [Octave-bug-tracker] [bug #34750] Plotting Hangs on OpenBSD
Date: Wed, 09 Nov 2011 09:51:47 +0000
User-agent: Mozilla/5.0 (X11; OpenBSD i386; rv:7.0.1) Gecko/20100101 Firefox/7.0.1

Follow-up Comment #4, bug #34750 (project octave):

Further findings:

I have built the entirety of octave-3.4.3 with -O0 and the hang still happens,
however, I notice only the first plot hangs; you can hit ctrl+c and try again
and it will work; as will subsequent plots.

I think we have a race condition on our hands and building with -O0 has
changed the timings of things. After you have hit ctrl+c on the first plot,
the only way to reproduce the plot hang is to *reboot* (weird, yes). This is
why I think it is a race condition.

Further inspection with ktrace (like strace) shows differing behavior with
regards to a fifo in /tmp.

A failing plot looks like this:

  6129 octave   CALL  stat(0x7f4ae14c,0xcfbcb38c)
  6129 octave   NAMI  "/tmp/oct-lniATRYpU"
  6129 octave   STRU  struct stat {dev=1024, ino=2130838, mode=prw------- ,
nlink=1, uid=1000, gid=0, rdev=0, atime=1320826993.263457384,
stime=1320826993.263457384, ctime=1320826993.263457384, size=0, blocks=0,
blksize=16384, flags=0x0, gen=0x0 }
  6129 octave   RET   stat 0
  6129 octave   CALL  open(0x7f4ae14c,0<O_RDONLY>,<unused>0)
  6129 octave   NAMI  "/tmp/oct-lniATRYpU"
  6129 octave   RET   open 6
  6129 octave   CALL  fcntl(0x6,F_GETFL,0)
  6129 octave   RET   fcntl 0
  6129 octave   CALL  fcntl(0x6,F_SETFL,0x4<O_NONBLOCK>)
  6129 octave   RET   fcntl 0
  6129 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
  6129 octave   RET   sigprocmask 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x3<PROT_READ|PROT_WRITE>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x1<PROT_READ>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  sigprocmask(SIG_SETMASK,0)
  6129 octave   RET   sigprocmask -65793/0xfffefeff
  6129 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
  6129 octave   RET   sigprocmask 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x3<PROT_READ|PROT_WRITE>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x1<PROT_READ>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  sigprocmask(SIG_SETMASK,0)
  6129 octave   RET   sigprocmask -65793/0xfffefeff
  6129 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
  6129 octave   RET   sigprocmask 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x3<PROT_READ|PROT_WRITE>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x1<PROT_READ>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  sigprocmask(SIG_SETMASK,0)
  6129 octave   RET   sigprocmask -65793/0xfffefeff
  6129 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
  6129 octave   RET   sigprocmask 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x3<PROT_READ|PROT_WRITE>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x1<PROT_READ>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  sigprocmask(SIG_SETMASK,0)
  6129 octave   RET   sigprocmask -65793/0xfffefeff
  6129 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
  6129 octave   RET   sigprocmask 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x3<PROT_READ|PROT_WRITE>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x1<PROT_READ>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  sigprocmask(SIG_SETMASK,0)
  6129 octave   RET   sigprocmask -65793/0xfffefeff
  6129 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
  6129 octave   RET   sigprocmask 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x3<PROT_READ|PROT_WRITE>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x1<PROT_READ>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  sigprocmask(SIG_SETMASK,0)
  6129 octave   RET   sigprocmask -65793/0xfffefeff
  6129 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
  6129 octave   RET   sigprocmask 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x3<PROT_READ|PROT_WRITE>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x1<PROT_READ>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  sigprocmask(SIG_SETMASK,0)
  6129 octave   RET   sigprocmask -65793/0xfffefeff
  6129 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
  6129 octave   RET   sigprocmask 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x3<PROT_READ|PROT_WRITE>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x1<PROT_READ>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  sigprocmask(SIG_SETMASK,0)
  6129 octave   RET   sigprocmask -65793/0xfffefeff
  6129 octave   CALL  write(0x7,0x8508b000,0x3c)
  6129 octave   GIO   fd 7 wrote 60 bytes
       "
        if (exists("GPVAL_TERM")) print GPVAL_TERM; else print NaN
       "
  6129 octave   RET   write 60/0x3c
  6129 octave   CALL  write(0x7,0x8508b000,0xb)
  6129 octave   GIO   fd 7 wrote 11 bytes
       "set print;
       "
  6129 octave   RET   write 11/0xb
  6129 octave   CALL  mprotect(0x86556000,0x1000,0x3<PROT_READ|PROT_WRITE>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  mprotect(0x86556000,0x1000,0x1<PROT_READ>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
  6129 octave   RET   sigprocmask 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x3<PROT_READ|PROT_WRITE>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x1<PROT_READ>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  sigprocmask(SIG_SETMASK,0)
  6129 octave   RET   sigprocmask -65793/0xfffefeff
  6129 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
  6129 octave   RET   sigprocmask 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x3<PROT_READ|PROT_WRITE>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x1<PROT_READ>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  sigprocmask(SIG_SETMASK,0)
  6129 octave   RET   sigprocmask -65793/0xfffefeff
  6129 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
  6129 octave   RET   sigprocmask 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x3<PROT_READ|PROT_WRITE>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x1<PROT_READ>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  sigprocmask(SIG_SETMASK,0)
  6129 octave   RET   sigprocmask -65793/0xfffefeff
  6129 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
  6129 octave   RET   sigprocmask 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x3<PROT_READ|PROT_WRITE>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x1<PROT_READ>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  sigprocmask(SIG_SETMASK,0)
  6129 octave   RET   sigprocmask -65793/0xfffefeff
  6129 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
  6129 octave   RET   sigprocmask 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x3<PROT_READ|PROT_WRITE>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  mprotect(0x2853f000,0x19000,0x1<PROT_READ>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  sigprocmask(SIG_SETMASK,0)
  6129 octave   RET   sigprocmask -65793/0xfffefeff
  6129 octave   CALL  fstat(0x6,0xcfbcb170)
  6129 octave   STRU  struct stat {dev=1024, ino=2130838, mode=prw------- ,
nlink=1, uid=1000, gid=0, rdev=0, atime=1320826993.263457384,
stime=1320826993.263457384, ctime=1320826993.263457384, size=0, blocks=0,
blksize=16384, flags=0x0, gen=0x0 }
  6129 octave   RET   fstat 0
  6129 octave   CALL  mprotect(0x88493000,0x1000,0x3<PROT_READ|PROT_WRITE>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  mprotect(0x88493000,0x1000,0x1<PROT_READ>)
  6129 octave   RET   mprotect 0
  6129 octave   CALL  read(0x6,0x87d51000,0x4000)
  6129 octave   GIO   fd 6 read 4 bytes
       "x11
       "
  6129 octave   RET   read 4
  6129 octave   CALL  read(0x6,0x87d51000,0x4000)
  6129 octave   RET   read -1 errno 35 Resource temporarily unavailable
  6129 octave   CALL 
getsockopt(0x6,SOL_SOCKET,SO_RCVTIMEO,0xcfbcb1c0,0xcfbcb1c8)
  6129 octave   RET   getsockopt -1 errno 38 Socket operation on non-socket
  6129 octave   CALL  poll(0x7effd000,0x1,0)
  6129 octave   RET   poll 0
  6129 octave   CALL  poll(0x7effd000,0x2,0xffffffff)


(The poll is the hang, notice the failed read() syscall).

Whereas the same area of execution on a working plot looks like:

 28785 octave   CALL  stat(0x808e3e2c,0xcfbde0cc)
 28785 octave   NAMI  "/tmp/oct-uGOkjVPOj"
 28785 octave   STRU  struct stat {dev=1024, ino=2130838, mode=prw------- ,
nlink=1, uid=1000, gid=0, rdev=0, atime=1320830033.487728920,
stime=1320830033.487728920, ctime=1320830033.487728920, size=0, blocks=0,
blksize=16384, flags=0x0, gen=0x0 }
 28785 octave   RET   stat 0
 28785 octave   CALL  open(0x808e3e2c,0<O_RDONLY>,<unused>0)
 28785 octave   NAMI  "/tmp/oct-uGOkjVPOj"
 28785 octave   RET   open 6
 28785 octave   CALL  fcntl(0x6,F_GETFL,0)
 28785 octave   RET   fcntl 0
 28785 octave   CALL  fcntl(0x6,F_SETFL,0x4<O_NONBLOCK>)
 28785 octave   RET   fcntl 0
 28785 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
 28785 octave   RET   sigprocmask 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x3<PROT_READ|PROT_WRITE>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x1<PROT_READ>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  sigprocmask(SIG_SETMASK,0)
 28785 octave   RET   sigprocmask -65793/0xfffefeff
 28785 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
 28785 octave   RET   sigprocmask 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x3<PROT_READ|PROT_WRITE>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x1<PROT_READ>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  sigprocmask(SIG_SETMASK,0)
 28785 octave   RET   sigprocmask -65793/0xfffefeff
 28785 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
 28785 octave   RET   sigprocmask 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x3<PROT_READ|PROT_WRITE>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x1<PROT_READ>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  sigprocmask(SIG_SETMASK,0)
 28785 octave   RET   sigprocmask -65793/0xfffefeff
 28785 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
 28785 octave   RET   sigprocmask 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x3<PROT_READ|PROT_WRITE>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x1<PROT_READ>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  sigprocmask(SIG_SETMASK,0)
 28785 octave   RET   sigprocmask -65793/0xfffefeff
 28785 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
 28785 octave   RET   sigprocmask 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x3<PROT_READ|PROT_WRITE>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x1<PROT_READ>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  sigprocmask(SIG_SETMASK,0)
 28785 octave   RET   sigprocmask -65793/0xfffefeff
 28785 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
 28785 octave   RET   sigprocmask 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x3<PROT_READ|PROT_WRITE>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x1<PROT_READ>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  sigprocmask(SIG_SETMASK,0)
 28785 octave   RET   sigprocmask -65793/0xfffefeff
 28785 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
 28785 octave   RET   sigprocmask 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x3<PROT_READ|PROT_WRITE>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x1<PROT_READ>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  sigprocmask(SIG_SETMASK,0)
 28785 octave   RET   sigprocmask -65793/0xfffefeff
 28785 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
 28785 octave   RET   sigprocmask 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x3<PROT_READ|PROT_WRITE>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x1<PROT_READ>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  sigprocmask(SIG_SETMASK,0)
 28785 octave   RET   sigprocmask -65793/0xfffefeff
 28785 octave   CALL  getpid()
 28785 octave   RET   getpid 28785/0x7071
 28785 octave   CALL  write(0x7,0x86c94000,0x3c)
 28785 octave   GIO   fd 7 wrote 60 bytes
       "
        if (exists("GPVAL_TERM")) print GPVAL_TERM; else print NaN
       "
 28785 octave   RET   write 60/0x3c
 28785 octave   CALL  write(0x7,0x86c94000,0xb)
 28785 octave   GIO   fd 7 wrote 11 bytes
       "set print;
       "
 28785 octave   RET   write 11/0xb
 28785 octave   CALL  mprotect(0x7fcb7000,0x1000,0x3<PROT_READ|PROT_WRITE>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  mprotect(0x7fcb7000,0x1000,0x1<PROT_READ>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
 28785 octave   RET   sigprocmask 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x3<PROT_READ|PROT_WRITE>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x1<PROT_READ>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  sigprocmask(SIG_SETMASK,0)
 28785 octave   RET   sigprocmask -65793/0xfffefeff
 28785 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
 28785 octave   RET   sigprocmask 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x3<PROT_READ|PROT_WRITE>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x1<PROT_READ>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  sigprocmask(SIG_SETMASK,0)
 28785 octave   RET   sigprocmask -65793/0xfffefeff
 28785 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
 28785 octave   RET   sigprocmask 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x3<PROT_READ|PROT_WRITE>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x1<PROT_READ>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  sigprocmask(SIG_SETMASK,0)
 28785 octave   RET   sigprocmask -65793/0xfffefeff
 28785 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
 28785 octave   RET   sigprocmask 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x3<PROT_READ|PROT_WRITE>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x1<PROT_READ>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  sigprocmask(SIG_SETMASK,0)
 28785 octave   RET   sigprocmask -65793/0xfffefeff
 28785 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
 28785 octave   RET   sigprocmask 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x3<PROT_READ|PROT_WRITE>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x1<PROT_READ>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  sigprocmask(SIG_SETMASK,0)
 28785 octave   RET   sigprocmask -65793/0xfffefeff
 28785 octave   CALL  fstat(0x6,0xcfbddeb0)
 28785 octave   STRU  struct stat {dev=1024, ino=2130838, mode=prw------- ,
nlink=1, uid=1000, gid=0, rdev=0, atime=1320830033.487728920,
stime=1320830033.487728920, ctime=1320830033.487728920, size=0, blocks=0,
blksize=16384, flags=0x0, gen=0x0 }
 28785 octave   RET   fstat 0
 28785 octave   CALL  mprotect(0x7fef4000,0x1000,0x3<PROT_READ|PROT_WRITE>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  mprotect(0x7fef4000,0x1000,0x1<PROT_READ>)
 28785 octave   RET   mprotect 0
 28785 octave   CALL  read(0x6,0x86f24000,0x4000)
 28785 octave   GIO   fd 6 read 4 bytes
       "x11
       "
 28785 octave   RET   read 4
 28785 octave   CALL  read(0x6,0x86f24000,0x4000)
 28785 octave   RET   read 0
 28785 octave   CALL  sigprocmask(SIG_BLOCK,0xffffffff)
 28785 octave   RET   sigprocmask 0
 28785 octave   CALL  mprotect(0x2f797000,0x19000,0x3<PROT_READ|PROT_WRITE>)
 28785 octave   RET   mprotect 0


(Notice that read DID NOT fail this time)

I suspscted the gnulib::mkfifo() at first, but if i remove the gnulib prefix,
so as to use openbsd's implementation, the same happens.

Looks like a race condition to me (right?)

I am out of time for now, but my question now is, do we know where in the code
this fifo is being made? Does gnuplot output to a pipe and octave picks it up?
Is it the case that octave is reading from the pipe *before* gnuplot is done?

Comments and ideas welcome.

Cheers

    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/bugs/?34750>

_______________________________________________
  Message sent via/by Savannah
  http://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]