Package: dejagnu
Version: 1.5-3
Severity: important
Tags: upstream patch

Dear Maintainer,

A very old bug, that was only recently patched in upstream dejagnu,
but that has been fixed in some other distros, causes dejagnu when
running on multiple cores to produce spurious errors/FAILs.

Depending on load dejagnu, when spawning a child process, might get a
SIGHUP when the child finishes, but not all output has been read in
the dejagnu parent process. This might cause dejagnu to report FAILs
for tests that should normally PASS.

The bug was found in 2005:
https://lists.gnu.org/archive/html/bug-dejagnu/2005-08/msg00000.html

But only applied upstream in 2011:
https://lists.gnu.org/archive/html/dejagnu/2011-03/msg00019.html
http://git.savannah.gnu.org/gitweb/?p=dejagnu.git;a=patch;h=50a378f626fcdbaf30202a36bf73738de08a53bf

It didn't make it into the dejagnu 1.5 or 1.5.1 release yet.

But has been in for example the fedora dejagnu package for years.
http://pkgs.fedoraproject.org/cgit/dejagnu.git/commit/?id=7d64d9a9d8bac6e44ea82144c30087fec9369704

The backport to the packaged dejagnu is simple:

--- /usr/share/dejagnu/remote.exp       2011-11-23 14:12:26.000000000 +0100
+++ /usr/share/dejagnu/remote.exp       2015-01-26 22:01:05.670611971 +0100
@@ -86,11 +86,16 @@
     # doesn't assign process groups correctly and we can't reliably kill
     # programs that bear children. We can't use tcl's exec because it has
     # no way to timeout programs that hang. *sigh*
+    #
+    # The expect command will close the connection when it sees EOF. On
+    # SMP machine, close the connection may send SIGHUP to the child
+    # and cause it to exit before it can exit normally.  We should make
+    # the child to ignore SIGHUP.
 
     global errorInfo
     if { "$inp" == "" && "$outp" == "" } {
        set id -1
-       set result [catch "eval spawn \{${commandline}\}" pid]
+       set result [catch "eval spawn -ignore SIGHUP \{${commandline}\}" pid]
        if { $result == 0 } {
            set result2 0
        } else {
@@ -130,7 +135,7 @@
            return [list -1 "open of $commandline $inp $outp failed: 
$errorInfo"]
        }
        set pid [pid $id]
-       set result [catch "spawn -leaveopen $id" result2]
+       set result [catch "spawn -ignore SIGHUP -leaveopen $id" result2]
     }
     # Prepend "-" to each pid, to generate the "process group IDs" needed by
     # kill.


-- System Information:
Debian Release: 7.8
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.2.0-4-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages dejagnu depends on:
ii  dpkg          1.16.15
ii  expect        5.45-2
ii  install-info  4.13a.dfsg.1-10

dejagnu recommends no packages.

dejagnu suggests no packages.

-- debconf-show failed


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to