Just following up on that, the problem seems to be that  
dbmfp->mfp->last_pgno  doesn't get read in properly when the database 
is reopened.  I *assume* that it should be the last page actually 
used, but at some point the free list allocates  71  (which was used 
in the database when it was written in the previous program) despite 
dbmfp->mfp->last_pgno  having been reset to 33.  I added the  if  
statement below in the diagnostic section at the end of 
CDB___memp_cmpr_alloc, and the only place it reports an error is the 
one that causes the crash...

#ifdef DEBUG_CMPR
      fprintf(stderr,"CDB___memp_cmpr_alloc:: reuse free page %d from 
weakcmpr\n", *pgnop);
      if (*pgnop > dbmfp->mfp->last_pgno)
          fprintf (stderr, "*******ERROR??  dbmfp->mfp->last_pgno %d,\ 
              allocating %d\n", dbmfp->mfp->last_pgno, *pgnop);
#endif

Good night :)
Lachlan

On Wednesday 05 March 2003 22:08, Lachlan Andrew wrote:

> I've got as far as finding that, at some point, page 3 has a chain
> 3->71->34, but that page 27 is then allocated the chain 27->70->71,
> so page 3 gets corrupted.  I'm about to start looking for the
> free-list.



-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
htdig-dev mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/htdig-dev

Reply via email to