bin/94767: [patch] rcorder(8) dumps core when does not use a
proper RCng script (dansguardian)
Adrian Steinmann
ast at marabu.ch
Sat Mar 25 17:20:34 UTC 2006
The following reply was made to PR bin/94767; it has been noted by GNATS.
From: Adrian Steinmann <ast at marabu.ch>
To: bug-followup at FreeBSD.org
Cc: ganbold at micom.mng.net
Subject: Re: bin/94767: [patch] rcorder(8) dumps core when does not use a
proper RCng script (dansguardian)
Date: Sat, 25 Mar 2006 18:13:54 +0100 (CET)
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
--0-674585855-1143306834=:31295
Content-Type: TEXT/PLAIN; charset=iso-8859-1; format=flowed
Content-Transfer-Encoding: 8BIT
I've run into this problem on -current too and have created three
test cases which dump core. With the mentioned patch two of the
cases are fixed, but one remains: It seems the "don't nuke unless
last node" patch works when no third "stub dependancy" interferes.
On 6.1-PRERELEASE all three test cases pass.
Adrian
Details:
#!/bin/sh
try()
{
[ $# -lt 2 ] && return
echo "=============== TEST rcorder $@"
files=$@
cmd="rcorder $files"
for f in $files
do
echo === cat $f:
cat $f
done
rm -f rcorder.core
echo === $cmd:
eval $cmd
[ -e rcorder.core ] && echo "DUMPED CORE - ^C to stop" && read a
rm -f rcorder.core $@
echo
}
{ echo "# PROVIDE: A"; echo "# REQUIRE: B"; } >A
{ echo "# PROVIDE: B"; echo "# REQUIRE: A"; } >B
try A B
{ echo "# PROVIDE: A"; echo "# REQUIRE: B C"; } >A
{ echo "# PROVIDE: B"; echo "# REQUIRE: A C"; } >B
{ echo "# PROVIDE: C"; } > C
try A B C
{ echo "# PROVIDE: A"; echo "# REQUIRE: B"; } >A
{ echo "# PROVIDE: B"; echo "# REQUIRE: C"; } >B
{ echo "# PROVIDE: C"; echo "# REQUIRE: A"; } >C
try A B C
exit 0
Index: rcorder.c
===================================================================
RCS file: /usr/cvs/src/sbin/rcorder/rcorder.c,v
retrieving revision 1.2
diff -u -r1.2 rcorder.c
--- rcorder.c 17 Jan 2006 08:01:00 -0000 1.2
+++ rcorder.c 25 Mar 2006 16:40:33 -0000
@@ -51,8 +51,9 @@
#include "sprite.h"
#include "hash.h"
+#define DEBUG 1
#ifdef DEBUG
-int debug = 0;
+int debug = 1;
# define DPRINTF(args) if (debug) { fflush(stdout); fprintf args; }
#else
# define DPRINTF(args)
here, all three test cases dump core, apparently the stack is being hit
in the first and third case:
=============== TEST1 rcorder A B
...
generate on ZZZZZZZZZZZZZZZZZZZZ
do_file on ZZZZZZZZZZZZZZZZZZZZ.
Segmentation fault (core dumped)
DUMPED CORE - ^C to stop
Core was generated by `rcorder'.
Program terminated with signal 11, Segmentation fault.
#0 0x080493ac in satisfy_req (rnode=0x5a5a5a5a,
filename=0xbfbfe7b0 "?ã¿¿\003\001") at /usr/src/sbin/rcorder/rcorder.c:655
655 entry = rnode->entry;
(gdb) where
#0 0x080493ac in satisfy_req (rnode=0x5a5a5a5a,
filename=0xbfbfe7b0 "?ã¿¿\003\001") at /usr/src/sbin/rcorder/rcorder.c:655
#1 0x08048fa3 in do_file (fnode=0xa000110)
at /usr/src/sbin/rcorder/rcorder.c:759
#2 0x0804917b in generate_ordering () at /usr/src/sbin/rcorder/rcorder.c:827
#3 0x08049369 in main (argc=2, argv=0x1)
at /usr/src/sbin/rcorder/rcorder.c:193
=============== TEST2 rcorder A B C
Program terminated with signal 11, Segmentation fault.
#0 satisfy_req (rnode=0xa000374, filename=0xa0001a0 "B")
at /usr/src/sbin/rcorder/rcorder.c:666
666 if (head->next == NULL)
(gdb) where
#0 satisfy_req (rnode=0xa000374, filename=0xa0001a0 "B")
at /usr/src/sbin/rcorder/rcorder.c:666
#1 0x08048fa3 in do_file (fnode=0xa0003e0)
at /usr/src/sbin/rcorder/rcorder.c:759
#2 0x080493d7 in satisfy_req (rnode=0xa000374, filename=0xa0001a0 "B")
at /usr/src/sbin/rcorder/rcorder.c:687
#3 0x08048fa3 in do_file (fnode=0xa000110)
at /usr/src/sbin/rcorder/rcorder.c:759
#4 0x080493d7 in satisfy_req (rnode=0xa000374, filename=0xa0001a0 "B")
at /usr/src/sbin/rcorder/rcorder.c:687
#5 0x08048fa3 in do_file (fnode=0xa0003e0)
at /usr/src/sbin/rcorder/rcorder.c:759
#6 0x0804917b in generate_ordering () at /usr/src/sbin/rcorder/rcorder.c:827
#7 0x08049369 in main (argc=3, argv=0x1)
at /usr/src/sbin/rcorder/rcorder.c:193
=============== TEST3 rcorder A B C
Program terminated with signal 11, Segmentation fault.
#0 0x080493ac in satisfy_req (rnode=0x5a5a5a5a,
filename=0xbfbfe7b0 "?ã¿¿???\n") at /usr/src/sbin/rcorder/rcorder.c:655
655 entry = rnode->entry;
(gdb) where
#0 0x080493ac in satisfy_req (rnode=0x5a5a5a5a,
filename=0xbfbfe7b0 "?ã¿¿???\n") at /usr/src/sbin/rcorder/rcorder.c:655
#1 0x08048fa3 in do_file (fnode=0xa000360)
at /usr/src/sbin/rcorder/rcorder.c:759
#2 0x0804917b in generate_ordering () at /usr/src/sbin/rcorder/rcorder.c:827
#3 0x08049369 in main (argc=3, argv=0x1)
at /usr/src/sbin/rcorder/rcorder.c:193
with the patch proposed earlier (skip nuking)
Index: rcorder.c
===================================================================
RCS file: /usr/cvs/src/sbin/rcorder/rcorder.c,v
retrieving revision 1.2
diff -u -r1.2 rcorder.c
--- rcorder.c 17 Jan 2006 08:01:00 -0000 1.2
+++ rcorder.c 25 Mar 2006 16:45:38 -0000
@@ -51,8 +51,9 @@
#include "sprite.h"
#include "hash.h"
+#define DEBUG 1
#ifdef DEBUG
-int debug = 0;
+int debug = 1;
# define DPRINTF(args) if (debug) { fflush(stdout); fprintf args; }
#else
# define DPRINTF(args)
@@ -796,10 +797,14 @@
fnode->last->next = fnode->next;
}
- DPRINTF((stderr, "nuking %s\n", fnode->filename));
if (was_set == 0) {
+ DPRINTF((stderr, "nuking %s\n", fnode->filename));
+#if 0
free(fnode->filename);
free(fnode);
+#else
+ DPRINTF((stderr, "but skipping it for now\n"));
+#endif
}
}
only TEST2 dumps core:
=============== TEST2 rcorder A B C
=== cat A:
# PROVIDE: A
# REQUIRE: B C
=== cat B:
# PROVIDE: B
# REQUIRE: A C
=== cat C:
# PROVIDE: C
=== rcorder A B C:
parse_args
initialize
crunch_all_files
generate on C
do_file on C.
next do: C
nuking C
but skipping it for now
generate on B
do_file on B.
do_file on A.
do_file on B.
rcorder: Circular dependency on file `B'.
Segmentation fault (core dumped)
Program terminated with signal 11, Segmentation fault.
#0 0x080493d0 in satisfy_req ()
(gdb) where
#0 0x080493d0 in satisfy_req ()
#1 0x08048fa3 in do_file ()
#2 0x080493ef in satisfy_req ()
#3 0x08048fa3 in do_file ()
#4 0x080493ef in satisfy_req ()
#5 0x08048fa3 in do_file ()
#6 0x08049193 in generate_ordering ()
#7 0x08049381 in main ()
--0-674585855-1143306834=:31295--
More information about the freebsd-rc
mailing list