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

Bug#624679: 4.7 regression: QProcess::waitForFinished() is broken on kfreebsd



Hello,

On šeštadienis 30 Balandis 2011 17:47:39 Modestas Vainius wrote:
> Package: libqtcore4
> Version: 4:4.7.2-3
> Severity: grave
> 
> Hello,
> 
> QProcess::waitForFinished(timeout) with timeout > 0 (however, big enough)
> seems to return false when the process has not finished yet (leaving
> QProcess::state() in QProcess::Running). However,
> QProcess::waitForFinished(-1) works fine.
> 
> This appears to be a regression in 4.7 (4.6.3 works fine). The bug triggers
> quite a few random FTBFSes like [1], [2].

This happens because Qt on kfreebsd is compiled without monotonic clock 
support [1] (or at least Qt thinks so). select() is interrupted by SIGCHLD [2] 
and then qt_safe_select() code kicks in with its bogus calculation of timeout 
during EINT [3] (basically, no monotonic clock -> you're screwed). Such 
fragileness is a bug by itself, I don't care about too much at moment as 
_POSIX_MONOTONIC_CLOCK is defined [4] so something is wrong with Qt checks.

[1] QElapsedTimer::isMonotonic() returns 0
[2]
 55109 minifail RET   write 24/0x18
 55109 minifail CALL  gettimeofday(0x7fffffffe3b0,0)
 55109 minifail RET   gettimeofday 0
 55109 minifail CALL  gettimeofday(0x7fffffffe3a0,0)
 55109 minifail RET   gettimeofday 0
 55109 minifail CALL  gettimeofday(0x7fffffffe2e0,0)
 55109 minifail RET   gettimeofday 0
 55109 minifail CALL  
select(0x14,0x7fffffffe470,0x7fffffffe3f0,0,0x7fffffffe350)
 55109 minifail RET   select 1
 55109 minifail CALL  ioctl(0xd,0x4004667f ,0x7fffffffe34c)
 55109 minifail RET   ioctl 0
 55109 minifail CALL  close(0xd)
 55109 minifail RET   close 0
 55109 minifail CALL  gettimeofday(0x7fffffffe3a0,0)
 55109 minifail RET   gettimeofday 0
 55109 minifail CALL  gettimeofday(0x7fffffffe2e0,0)
 55109 minifail RET   gettimeofday 0
 55109 minifail CALL  
select(0x14,0x7fffffffe470,0x7fffffffe3f0,0,0x7fffffffe350)
 55109 minifail RET   select 1
 55109 minifail CALL  ioctl(0xf,0x4004667f ,0x7fffffffe34c)
 55109 minifail RET   ioctl 0
 55109 minifail CALL  close(0xf)
 55109 minifail RET   close 0
 55109 minifail CALL  gettimeofday(0x7fffffffe3a0,0)
 55109 minifail RET   gettimeofday 0
 55109 minifail CALL  gettimeofday(0x7fffffffe2e0,0)
 55109 minifail RET   gettimeofday 0
 55109 minifail CALL  
select(0x14,0x7fffffffe470,0x7fffffffe3f0,0,0x7fffffffe350)
 55109 minifail RET   select -1 errno 4 Interrupted system call
 55109 minifail PSIG  SIGCHLD caught handler=0x8017b51a0 mask=0x80000000 
code=0x0
 55109 minifail CALL  write(0x6,0x800a49a0a,0x1)
 55109 minifail GIO   fd 6 wrote 1 byte
       "\0"
 55109 minifail RET   write 1
 55109 minifail CALL  sigreturn(0x7fffffffdeb0)
 55109 minifail RET   sigreturn JUSTRETURN
 55109 minifail CALL  break(0x645000)
 55109 minifail RET   break 0
 55109 minifail CALL  break(0x641000)
 55109 minifail RET   break 0
 55109 minifail CALL  write(0x2,0x7fffffffbcb0,0x34)
 55109 minifail GIO   fd 2 wrote 52 bytes
       "exit code=0, exitcode=0, state=2, error=2. Aborting
       "
[3] 
http://qt.gitorious.org/qt/qt/blobs/4.7/src/corelib/kernel/qcore_unix.cpp#line91

[4] /usr/include/bits/posix_opt.h:156:#define _POSIX_MONOTONIC_CLOCK        
200809L


-- 
Modestas Vainius <modax@debian.org>

Attachment: signature.asc
Description: This is a digitally signed message part.


Reply to: