about summary refs log tree commit diff
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 48e09e6f23..fe7c807384 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;
 }