# New Ticket Created by Tony Payne
# Please include the string: [perl #822]
# in the subject line of all future correspondence about this issue.
# URL: http://bugs6.perl.org/rt2/Ticket/Display.html?id=822
I set off to try to increase the coverage of parrot_coverage and right away
tripped into a segfault in intqueue if you try to dequeue an empty queue.
This patch fixes the segfault and adds a test for it.
++t
-- attachment 1 --
url: http://bugs6.perl.org/rt2/attach/3866/3577/55bba3/intq.diff
Index: t/pmc/pmc.t
===
RCS file: /cvs/public/parrot/t/pmc/pmc.t,v
retrieving revision 1.32
diff -u -u -r1.32 pmc.t
--- t/pmc/pmc.t 4 Jul 2002 00:49:04 - 1.32
+++ t/pmc/pmc.t 16 Jul 2002 01:42:42 -
-1,6 +1,6
#! perl -w
-use Parrot::Test tests = 59;
+use Parrot::Test tests = 60;
use Test::More;
my $fp_equality_macro = 'ENDOFMACRO';
-1258,6 +1258,15
ok 3
ok 4
OUTPUT
+
+output_is(CODE, OUTPUT, IntQueue test);
+ new P0,.IntQueue
+set I0, P0
+end
+CODE
+*** dequeue tried to dequeue empty bucket
+OUTPUT
+
output_is(CODE, OUTPUT, mul_p_p, PerlInt);
{[ $fp_equality_macro ]}
Index: classes/intqueue.pmc
===
RCS file: /cvs/public/parrot/classes/intqueue.pmc,v
retrieving revision 1.10
diff -u -u -r1.10 intqueue.pmc
--- classes/intqueue.pmc 11 Jun 2002 21:04:58 - 1.10
+++ classes/intqueue.pmc 16 Jul 2002 01:42:42 -
-49,20 +49,24
}
static INTVAL dequeue ( CONTAINER* container ) {
- INTVAL value = container-tail-value;
+ INTVAL value;
if(container-head != container-tail) {
BUCKET* cur = container-tail;
+value = container-tail-value;
container-tail = container-tail-prev;
container-tail-next = NULL;
free(cur);
}
else if(container-head != NULL) {
+value = container-tail-value;
free(container-head);
container-head = NULL;
container-tail = NULL;
}
else {
fprintf(stderr,*** dequeue tried to dequeue empty bucket\n);
+/* XXX: Should raise an exception */
+return 0;
}
return value;
}