+++ /dev/null
-Index: db/hash/hash_dup.c
-===================================================================
-RCS file: /cvs/devel/rpm/db/hash/hash_dup.c,v
-retrieving revision 1.1.1.2.2.3
-retrieving revision 1.1.1.2.2.4
-diff -u -1 -0 -r1.1.1.2.2.3 -r1.1.1.2.2.4
---- db/hash/hash_dup.c 2002/01/08 04:07:30 1.1.1.2.2.3
-+++ db/hash/hash_dup.c 2002/02/13 23:22:52 1.1.1.2.2.4
-@@ -606,20 +606,25 @@
- PGNO(next_pagep), NUM_ENT(next_pagep) - 2)) != 0)
- goto out;
-
- /* Now delete the pair from the current page. */
- ret = __ham_del_pair(dbc, 0);
-
- /*
- * __ham_del_pair decremented nelem. This is incorrect; we
- * manually copied the element elsewhere, so the total number
- * of elements hasn't changed. Increment it again.
-+ *
-+ * !!!
-+ * Note that we still have the metadata page pinned, and
-+ * __ham_del_pair dirtied it, so we don't need to set the dirty
-+ * flag again.
- */
- if (!STD_LOCKING(dbc))
- hcp->hdr->nelem++;
-
- out:
- (void)mpf->put(mpf, hcp->page, DB_MPOOL_DIRTY);
- hcp->page = next_pagep;
- hcp->pgno = PGNO(hcp->page);
- hcp->indx = NUM_ENT(hcp->page) - 2;
- F_SET(hcp, H_EXPAND);
-Index: db/hash/hash_page.c
-===================================================================
-RCS file: /cvs/devel/rpm/db/hash/hash_page.c,v
-retrieving revision 1.1.1.2.2.3
-retrieving revision 1.1.1.2.2.4
-diff -u -1 -0 -r1.1.1.2.2.3 -r1.1.1.2.2.4
---- db/hash/hash_page.c 2002/01/08 04:07:30 1.1.1.2.2.3
-+++ db/hash/hash_page.c 2002/02/13 23:22:52 1.1.1.2.2.4
-@@ -636,22 +636,25 @@
- if ((ret = __ham_c_update(dbc, 0, 0, 0)) != 0)
- return (ret);
-
- /*
- * If we are locking, we will not maintain this, because it is
- * a hot spot.
- *
- * XXX
- * Perhaps we can retain incremental numbers and apply them later.
- */
-- if (!STD_LOCKING(dbc))
-+ if (!STD_LOCKING(dbc)) {
- --hcp->hdr->nelem;
-+ if ((ret = __ham_dirty_meta(dbc)) != 0)
-+ return (ret);
-+ }
-
- /*
- * If we need to reclaim the page, then check if the page is empty.
- * There are two cases. If it's empty and it's not the first page
- * in the bucket (i.e., the bucket page) then we can simply remove
- * it. If it is the first chain in the bucket, then we need to copy
- * the second page into it and remove the second page.
- * If its the only page in the bucket we leave it alone.
- */
- if (!reclaim_page ||
-@@ -1407,22 +1410,25 @@
- * next time we come in here. For other operations, this shouldn't
- * matter, since odds are this is the last thing that happens before
- * we return to the user program.
- */
- hcp->pgno = PGNO(hcp->page);
-
- /*
- * XXX
- * Maybe keep incremental numbers here.
- */
-- if (!STD_LOCKING(dbc))
-+ if (!STD_LOCKING(dbc)) {
- hcp->hdr->nelem++;
-+ if ((ret = __ham_dirty_meta(dbc)) != 0)
-+ return (ret);
-+ }
-
- if (do_expand || (hcp->hdr->ffactor != 0 &&
- (u_int32_t)H_NUMPAIRS(hcp->page) > hcp->hdr->ffactor))
- F_SET(hcp, H_EXPAND);
- return (0);
- }
-
- /*
- * Special __putitem call used in splitting -- copies one entry to
- * another. Works for all types of hash entries (H_OFFPAGE, H_KEYDATA,