Date: Sat, 13 Jan 2001 15:43:57 +1030 From: Matthew Thyer <thyerm@camtech.net.au> To: current@FreeBSD.org Cc: ports@FreeBSD.org, jwz@jwz.org, jseger@FreeBSD.org Subject: Data corruption whilst debugging sonar module of ports/graphics/xscreensaver-gtk-3.26 ? Message-ID: <3A5FE415.514893C7@camtech.net.au>
next in thread | raw e-mail | index | archive | help
Both of my main FreeBSD-CURRENT machines cant seem to run the sonar
module from xscreensaver-gtk-3.26 for very long. It crashes with a
SIGBUS on line 1654 of xscreensaver-3.26/hacks/sonar.c when the sonar
sweep gets back around to the first bogie that was ever displayed.
Since my home box is XFree 3.3.6 and work is XFree 4.0.2, I assume
this is a bug with the screensaver itself. Note both machines are
recent -CURRENT (within 1 week of today).
Today I had some spare time (wife and kids out of my hair) so I
installed ports/devel/ddd to have a look at whats going on.
To reproduce what I'm doing:
- Install ports/devel/ddd
- Set "CFLAGS=-g -pipe" in /etc/make.conf
- cd /usr/ports/x11/xscreensaver ; sudo make install
- Set your CFLAGS back to what they were
- cd /usr/ports/x11/xscreensaver/work/xscreensaver-3.26/hacks
- ddd &
- File->Open Program... and choose "sonar"
- Run until it dies with the SIGBUS on line 1654 (subroutine "Sonar")
- Display "si", "*si", "*si->visable", all the "*si->visable{->next}*"
(e.g. "*si->visable->next", "*si->visable->next->next" etc) and
the local variables.
I'm seeing the local variable "bp" with a value of 0xd0d0d0d0.
I cant see how this happens when "bp" is initialised from
si->visable in the for loop at line 1647 and thereafter follows
the list (via ->next) where no members have an address of 0xd0d0d0d0.
It seems that something in sonar.c is overwriting memory it shouldn't.
I haven't done much debugging since Uni, so I was wonderring if
others can reproduce this and does someone have some ideas how I
can easily detect this data corruption with ddd or is it a compiler
bug ? (I suspect not as it always happens when the sweep gets back
around to the first bogie ever displayed).
Does anyone recognise where 0xd0d0d0d0 may have come from ?
1635 static void
1636 Sonar(sonar_info *si, Bogie *bl)
1637 {
1638
1639 /* Local Variables */
1640
1641 Bogie *bp, *prev;
1642 int i;
1643
1644 /* Check for expired tagets and remove them from the visable list */
1645
1646 prev = NULL;
1647 for (bp = si->visable; bp != NULL; bp = bp->next) {
1648
1649 /*
1650 * Remove it from the visable list if it's expired or we have
1651 * a new target with the same name.
1652 */
1653
1654 bp->age ++;
1655
Thanks
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3A5FE415.514893C7>
