[Top][All Lists]
[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/