aboutsummaryrefslogtreecommitdiff
path: root/db2/db/db_rec.c
diff options
context:
space:
mode:
Diffstat (limited to 'db2/db/db_rec.c')
-rw-r--r--db2/db/db_rec.c51
1 files changed, 31 insertions, 20 deletions
diff --git a/db2/db/db_rec.c b/db2/db/db_rec.c
index 48e09e6..fe7c807 100644
--- a/db2/db/db_rec.c
+++ b/db2/db/db_rec.c
@@ -1,30 +1,25 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997
+ * Copyright (c) 1996, 1997, 1998
* Sleepycat Software. All rights reserved.
*/
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)db_rec.c 10.12 (Sleepycat) 1/8/98";
+static const char sccsid[] = "@(#)db_rec.c 10.16 (Sleepycat) 4/28/98";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-#endif
-#include <ctype.h>
-#include <errno.h>
-#include <stddef.h>
-#include <stdlib.h>
#include <string.h>
+#endif
#include "db_int.h"
#include "shqueue.h"
#include "db_page.h"
-#include "db_dispatch.h"
#include "log.h"
#include "hash.h"
#include "btree.h"
@@ -48,7 +43,8 @@ __db_addrem_recover(logp, dbtp, lsnp, redo, info)
DB *file_dbp, *mdbp;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- int change, cmp_n, cmp_p, ret;
+ u_int32_t change;
+ int cmp_n, cmp_p, ret;
REC_PRINT(__db_addrem_print);
REC_INTRO(__db_addrem_read);
@@ -193,7 +189,8 @@ __db_big_recover(logp, dbtp, lsnp, redo, info)
DB *file_dbp, *mdbp;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- int change, cmp_n, cmp_p, ret;
+ u_int32_t change;
+ int cmp_n, cmp_p, ret;
REC_PRINT(__db_big_print);
REC_INTRO(__db_big_read);
@@ -503,7 +500,8 @@ __db_addpage_recover(logp, dbtp, lsnp, redo, info)
DB *file_dbp, *mdbp;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- int change, cmp_n, cmp_p, ret;
+ u_int32_t change;
+ int cmp_n, cmp_p, ret;
REC_PRINT(__db_addpage_print);
REC_INTRO(__db_addpage_read);
@@ -601,8 +599,7 @@ __db_debug_recover(logp, dbtp, lsnp, redo, info)
* __db_noop_recover --
* Recovery function for noop.
*
- * PUBLIC: int __db_noop_recover
- * PUBLIC: __P((DB_LOG *, DBT *, DB_LSN *, int, void *));
+ * PUBLIC: int __db_noop_recover __P((DB_LOG *, DBT *, DB_LSN *, int, void *));
*/
int
__db_noop_recover(logp, dbtp, lsnp, redo, info)
@@ -613,16 +610,30 @@ __db_noop_recover(logp, dbtp, lsnp, redo, info)
void *info;
{
__db_noop_args *argp;
- int ret;
-
- COMPQUIET(redo, 0);
- COMPQUIET(logp, NULL);
+ DB *file_dbp, *mdbp;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ u_int32_t change;
+ int cmp_n, cmp_p, ret;
REC_PRINT(__db_noop_print);
- REC_NOOP_INTRO(__db_noop_read);
+ REC_INTRO(__db_noop_read);
+
+ if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
+ goto out;
+ cmp_n = log_compare(lsnp, &LSN(pagep));
+ cmp_p = log_compare(&LSN(pagep), &argp->prevlsn);
+ change = 0;
+ if (cmp_p == 0 && redo) {
+ LSN(pagep) = *lsnp;
+ change = DB_MPOOL_DIRTY;
+ } else if (cmp_n == 0 && !redo) {
+ LSN(pagep) = argp->prevlsn;
+ change = DB_MPOOL_DIRTY;
+ }
*lsnp = argp->prev_lsn;
- ret = 0;
+ ret = memp_fput(mpf, pagep, change);
- REC_NOOP_CLOSE;
+out: REC_CLOSE;
}