This patch is against Sleepycat's db-4.0.14 release.  It's not on the
Sleepycat site.  It fixes cases of database corruption Barry (Warsaw)
was seeing, and Barry got it from Sleepycat.

*** db/db_reclaim.c.orig	2002/04/05 16:16:17	11.22
--- db/db_reclaim.c	2002/04/10 18:53:13	11.23
***************
*** 195,202 ****
  				    dbp->log_fileid, p->pgno, &LSN(meta),
  				    PGNO_BASE_MD, &ldbt, meta->free)) != 0)
  					goto err;
- 
  				LSN(p) = LSN(meta);
  				if ((ret =
  				    __db_pg_alloc_log(dbp->dbenv,
  				    param->dbc->txn, &LSN(meta), 0,
--- 195,202 ----
  				    dbp->log_fileid, p->pgno, &LSN(meta),
  				    PGNO_BASE_MD, &ldbt, meta->free)) != 0)
  					goto err;
  				LSN(p) = LSN(meta);
+ 
  				if ((ret =
  				    __db_pg_alloc_log(dbp->dbenv,
  				    param->dbc->txn, &LSN(meta), 0,
***************
*** 206,211 ****
--- 206,213 ----
  					(void)__TLPUT(param->dbc, metalock);
  					return (ret);
  				}
+ 				LSN(p) = LSN(meta);
+ 
  				if ((ret = mpf->put(mpf,
  				     (PAGE *)meta, DB_MPOOL_DIRTY)) != 0) {
  					(void)__TLPUT(param->dbc, metalock);
