summaryrefslogtreecommitdiff
path: root/bdb/patches
diff options
context:
space:
mode:
authormonty@donna.mysql.fi <>2001-03-06 20:38:53 +0200
committermonty@donna.mysql.fi <>2001-03-06 20:38:53 +0200
commite829e96dbc87321f91b305c8017673a655d1a2cd (patch)
tree9613587a263dc7a069c1038873e71db018c29273 /bdb/patches
parentf1b9242dc8b3cd52ba0045bddd1eb83e4c01eac4 (diff)
downloadmariadb-git-e829e96dbc87321f91b305c8017673a655d1a2cd.tar.gz
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
Diffstat (limited to 'bdb/patches')
-rw-r--r--bdb/patches/log-corruption.patch62
1 files changed, 62 insertions, 0 deletions
diff --git a/bdb/patches/log-corruption.patch b/bdb/patches/log-corruption.patch
new file mode 100644
index 00000000000..16c37ff7c06
--- /dev/null
+++ b/bdb/patches/log-corruption.patch
@@ -0,0 +1,62 @@
+# 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);
+ }
+
+ /*