diff options
author | Mattias Jonsson <mattias.jonsson@sun.com> | 2010-02-10 10:47:14 +0100 |
---|---|---|
committer | Mattias Jonsson <mattias.jonsson@sun.com> | 2010-02-10 10:47:14 +0100 |
commit | dca6700620d5f4b325c3aadbbf5ab30c5b888a8c (patch) | |
tree | 1abc5a1adcb9a036100dcca4f13555cc20c8fd1f /sql/unireg.h | |
parent | f5311bba7e1847210d365bc476d2973dd39da3bd (diff) | |
download | mariadb-git-dca6700620d5f4b325c3aadbbf5ab30c5b888a8c.tar.gz |
Bug#50201: Server crashes in explain_filename on an InnoDB partitioned table
Problem was that in mysql-trunk the ER() macro is now dependent on current_thd
and the innodb monitor thread has no binding to that thd object. This cause
the crash because of bad derefencing.
Solution was to add a new macro which take the thd as an argument (which the innodb
thread uses for the call).
(Updated according to reviewers comments, i.e. added ER_THD_OR_DEFAULT and
moved test to suite parts.)
mysql-test/suite/parts/r/partition_innodb_status_file.result:
Bug#50201: Server crashes in explain_filename on an InnoDB partitioned table
New test result file
mysql-test/suite/parts/t/partition_innodb_status_file-master.opt:
Bug#50201: Server crashes in explain_filename on an InnoDB partitioned table
New test opt file
mysql-test/suite/parts/t/partition_innodb_status_file.test:
Bug#50201: Server crashes in explain_filename on an InnoDB partitioned table
New test.
Note that the innodb monitor thread only runs every 15 seconds, so this
test will take at least 15 seconds, so I have moved it to the parts suite.
sql/sql_table.cc:
Bug#50201: Server crashes in explain_filename on an InnoDB partitioned table
Using thd safe ER macro.
sql/unireg.h:
Bug#50201: Server crashes in explain_filename on an InnoDB partitioned table
Added ER macros for use with specified thd pointer.
Diffstat (limited to 'sql/unireg.h')
-rw-r--r-- | sql/unireg.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/sql/unireg.h b/sql/unireg.h index a390b755772..e915b234a6b 100644 --- a/sql/unireg.h +++ b/sql/unireg.h @@ -46,6 +46,9 @@ #define ER(X) CURRENT_THD_ERRMSGS[(X) - ER_ERROR_FIRST] #define ER_DEFAULT(X) DEFAULT_ERRMSGS[(X) - ER_ERROR_FIRST] #define ER_SAFE(X) (((X) >= ER_ERROR_FIRST && (X) <= ER_ERROR_LAST) ? ER(X) : "Invalid error code") +#define ER_THD(thd,X) ((thd)->variables.lc_messages->errmsgs->errmsgs[(X) - \ + ER_ERROR_FIRST]) +#define ER_THD_OR_DEFAULT(thd,X) ((thd) ? ER_THD(thd, X) : ER_DEFAULT(X)) #define ERRMAPP 1 /* Errormap f|r my_error */ |