# This patch fixes a bug caused mysqld to get a core dump while
# bdb tries to resolve the log file after mysqld was killed with kill -9.
#
# Author: Michael Ubell, Sleepycat Software
# Mon, 26 Feb 2001 12:56:23 -0500 (EST)
#

*** log/log_rec.c	2001/02/08 03:05:01	11.50
--- log/log_rec.c	2001/02/24 00:42:46	11.51
***************
*** 50,55 ****
--- 50,56 ----
  #include "db_am.h"
  #include "log.h"
  
+ static int __log_check_master __P((DB_ENV *, u_int8_t *, char *));
  static int __log_do_open __P((DB_ENV *, DB_LOG *,
      u_int8_t *, char *, DBTYPE, int32_t, db_pgno_t));
  static int __log_open_file __P((DB_ENV *, DB_LOG *, __log_register_args *));
***************
*** 341,346 ****
--- 342,350 ----
  		 * Verify that we are opening the same file that we were
  		 * referring to when we wrote this log record.
  		 */
+ 		if (meta_pgno != PGNO_BASE_MD &&
+ 		    __log_check_master(dbenv, uid, name) != 0)
+ 			goto not_right;
  		if (memcmp(uid, dbp->fileid, DB_FILE_ID_LEN) != 0) {
  			memset(zeroid, 0, DB_FILE_ID_LEN);
  			if (memcmp(dbp->fileid, zeroid, DB_FILE_ID_LEN) != 0)
***************
*** 359,364 ****
--- 363,390 ----
  	(void)__log_add_logid(dbenv, lp, NULL, ndx);
  
  	return (ENOENT);
+ }
+ 
+ static int
+ __log_check_master(dbenv, uid, name)
+ 	DB_ENV *dbenv;
+ 	u_int8_t *uid;
+ 	char *name;
+ {
+ 	DB *dbp;
+ 	int ret;
+ 
+ 	ret = 0;
+ 	if ((ret = db_create(&dbp, dbenv, 0)) != 0)
+ 		return (ret);
+ 	dbp->type = DB_BTREE;
+ 	ret = __db_dbopen(dbp, name, 0, __db_omode("rw----"), PGNO_BASE_MD);
+ 
+ 	if (ret == 0 && memcmp(uid, dbp->fileid, DB_FILE_ID_LEN) != 0) 
+ 		ret = EINVAL;
+ 	
+ 	(void) dbp->close(dbp, 0);
+ 	return (ret);
  }
  
  /*
