No, this doesn't ring a bell for me either. The sle_next field is
supposed to be set to an offset, or -1 if there's no next entry, so
I can't imagine why, short of database corruption, it would ever get
set to 0. Now, we have had spurious reports of database corruption in
3.1.6, but nothing solid or consistent enough to nail down to anything in
particular. This is the first case of an infinite loop that I can recall.
I've compared the db_salloc.c code, as well as the shqueue.h code, between
Berkeley DB 2.6.4 (from ht://Dig 3.1.6) and 3.0.55 (from 3.2.0b5), and
the only noticeable change seems to be the setting of the align variable
around line 85 of db_salloc.c (function __db_shalloc). In 2.6.4, it's
adjusted as:
align = align <= sizeof(size_t) ?
sizeof(size_t) : ALIGN(align, sizeof(size_t));
while in 3.0.55, or at least ht://Dig 3.2's variant of it, it's simply
overridden as:
align = 8;
Now, I can't say whether this is an important change or not, but it seems
to me that the s390 architecture is a bit more alignment-sensitive than
a typical i386 architecture, so it could be that changing this may help
to prevent the occasional corruption you're experiencing.
If you want to give it a shot, make the change above, recompile and
reinstall everything, and rebuild all your databases from scratch, and
use it for a while to see if the problem recurs. Please let us know if
this helps or not, after you've had time to try it for a while.
According to Jim:
> I don't recall anyone else reporting this type of problem. You might
> want to submit an official bug report and/or post the details to the
> developer list.
>
> Jim
>
> On Fri, 11 Jun 2004 [EMAIL PROTECTED] wrote:
>
> > Running htdig 3.1.6 on SuSE linux (SLES8) on a big endian architecture
> > (s390).
> >
> > Though it usually works fine, twice now htdig has gotten into a loop at
> > the same place, using all CPU until killed.
> >
> > The loop occurs in __db_shalloc_free (db/common/db_salloc.c) in this
> > code:
> >
> > for (elp = SH_LIST_FIRST(hp, __data), lastp = NULL;
> > elp != NULL && (void *)elp < (void *)ptr;
> > lastp = elp, elp = SH_LIST_NEXT(elp, links, __data))
> > ;
> >
> > It appears that somehow links.sle_next is 0, so each elp =
> > SH_LIST_NEXT(...) will forever assign elp + 0 to elp.
> >
> > I'm not familiar with htdig, but it appears sle_next is only set by
> > SH_LIST_INSERT_AFTER. Is this a known issue? Any patches?
> >
> > Please CC me in reply as I am not subscribed to this list.
> >
> > Thanks for any info,
> > ~ Daniel
--
Gilles R. Detillieux E-mail: <[EMAIL PROTECTED]>
Spinal Cord Research Centre WWW: http://www.scrc.umanitoba.ca/
Dept. Physiology, U. of Manitoba Winnipeg, MB R3E 3J7 (Canada)
-------------------------------------------------------
This SF.Net email is sponsored by The 2004 JavaOne(SM) Conference
Learn from the experts at JavaOne(SM), Sun's Worldwide Java Developer
Conference, June 28 - July 1 at the Moscone Center in San Francisco, CA
REGISTER AND SAVE! http://java.sun.com/javaone/sf Priority Code NWMGYKND
_______________________________________________
ht://Dig general mailing list: <[EMAIL PROTECTED]>
ht://Dig FAQ: http://htdig.sourceforge.net/FAQ.html
List information (subscribe/unsubscribe, etc.)
https://lists.sourceforge.net/lists/listinfo/htdig-general