mariadb/bdb/patches/log-corruption.patch
monty@donna.mysql.fi e829e96dbc Patch from sleepycat to fix problem with BDB and log files
Print full command name to log files
Convert table type to supported onces on ALTER TABLE
2001-03-06 20:38:53 +02:00

62 lines
1.6 KiB
Diff

# 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);
}
/*