*** log/log_rec.c.orig Wed Oct 21 21:07:17 1998 --- log/log_rec.c Mon Mar 1 21:45:01 1999 *************** *** 56,63 **** #include "db_dispatch.h" #include "common_ext.h" ! static int __log_open_file __P((DB_LOG *, ! u_int8_t *, char *, DBTYPE, u_int32_t)); /* * PUBLIC: int __log_register_recover --- 56,62 ---- #include "db_dispatch.h" #include "common_ext.h" ! static int __log_open_file __P((DB_LOG *, __log_register_args *)); /* * PUBLIC: int __log_register_recover *************** *** 95,102 **** * If we are redoing an open or undoing a close, then we need * to open a file. */ ! ret = __log_open_file(logp, ! argp->uid.data, argp->name.data, argp->ftype, argp->id); if (ret == ENOENT) { if (redo == TXN_OPENFILES) __db_err(logp->dbenv, "warning: %s: %s", --- 94,100 ---- * If we are redoing an open or undoing a close, then we need * to open a file. */ ! ret = __log_open_file(logp, argp); if (ret == ENOENT) { if (redo == TXN_OPENFILES) __db_err(logp->dbenv, "warning: %s: %s", *************** *** 133,140 **** * closed and has therefore not been reopened yet. If * so, we need to try to open it. */ ! ret = __log_open_file(logp, ! argp->uid.data, argp->name.data, argp->ftype, argp->id); if (ret == ENOENT) { __db_err(logp->dbenv, "warning: %s: %s", argp->name.data, strerror(ENOENT)); --- 131,137 ---- * closed and has therefore not been reopened yet. If * so, we need to try to open it. */ ! ret = __log_open_file(logp, argp); if (ret == ENOENT) { __db_err(logp->dbenv, "warning: %s: %s", argp->name.data, strerror(ENOENT)); *************** *** 156,175 **** * Returns 0 on success, non-zero on error. */ static int ! __log_open_file(lp, uid, name, ftype, ndx) DB_LOG *lp; ! u_int8_t *uid; ! char *name; ! DBTYPE ftype; ! u_int32_t ndx; { DB *dbp; int ret; LOCK_LOGTHREAD(lp); ! if (ndx < lp->dbentry_cnt && ! (lp->dbentry[ndx].deleted == 1 || lp->dbentry[ndx].dbp != NULL)) { ! lp->dbentry[ndx].refcount++; UNLOCK_LOGTHREAD(lp); return (0); --- 153,171 ---- * Returns 0 on success, non-zero on error. */ static int ! __log_open_file(lp, argp) DB_LOG *lp; ! __log_register_args *argp; { DB *dbp; int ret; LOCK_LOGTHREAD(lp); ! if (argp->id < lp->dbentry_cnt && ! (lp->dbentry[argp->id].deleted == 1 || ! lp->dbentry[argp->id].dbp != NULL)) { ! if (argp->opcode != LOG_CHECKPOINT) ! lp->dbentry[argp->id].refcount++; UNLOCK_LOGTHREAD(lp); return (0); *************** *** 178,189 **** /* Need to open file. */ dbp = NULL; ! if ((ret = db_open(name, ftype, 0, 0, lp->dbenv, NULL, &dbp)) == 0) { /* * Verify that we are opening the same file that we were * referring to when we wrote this log record. */ ! if (memcmp(uid, dbp->fileid, DB_FILE_ID_LEN) != 0) { (void)dbp->close(dbp, 0); dbp = NULL; ret = ENOENT; --- 174,186 ---- /* Need to open file. */ dbp = NULL; ! if ((ret = db_open(argp->name.data, ! argp->ftype, 0, 0, lp->dbenv, NULL, &dbp)) == 0) { /* * Verify that we are opening the same file that we were * referring to when we wrote this log record. */ ! if (memcmp(argp->uid.data, dbp->fileid, DB_FILE_ID_LEN) != 0) { (void)dbp->close(dbp, 0); dbp = NULL; ret = ENOENT; *************** *** 191,197 **** } if (ret == 0 || ret == ENOENT) ! (void)__log_add_logid(lp, dbp, ndx); return (ret); } --- 188,194 ---- } if (ret == 0 || ret == ENOENT) ! (void)__log_add_logid(lp, dbp, argp->id); return (ret); } *************** *** 295,303 **** u_int32_t i; LOCK_LOGTHREAD(logp); for (i = 0; i < logp->dbentry_cnt; i++) ! if (logp->dbentry[i].dbp) logp->dbentry[i].dbp->close(logp->dbentry[i].dbp, 0); UNLOCK_LOGTHREAD(logp); } --- 292,305 ---- u_int32_t i; LOCK_LOGTHREAD(logp); + F_SET(logp, DBC_RECOVER); for (i = 0; i < logp->dbentry_cnt; i++) ! if (logp->dbentry[i].dbp) { logp->dbentry[i].dbp->close(logp->dbentry[i].dbp, 0); + logp->dbentry[i].dbp = NULL; + logp->dbentry[i].deleted = 0; + } + F_CLR(logp, DBC_RECOVER); UNLOCK_LOGTHREAD(logp); }