From 48554fe2db9643f0d611214b6719af7240653886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= Date: Tue, 19 Feb 2019 16:11:06 +0200 Subject: [PATCH] MDEV-18632: wsrep_is_wsrep_xid: Conditional jump or move depends on uninitialised value Transaction XID is not initialized before transaction is started. --- .../suite/innodb/r/innodb-rollback.result | 10 ++++++++++ mysql-test/suite/innodb/t/innodb-rollback.test | 17 +++++++++++++++++ storage/innobase/handler/ha_innodb.cc | 2 +- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 mysql-test/suite/innodb/r/innodb-rollback.result create mode 100644 mysql-test/suite/innodb/t/innodb-rollback.test diff --git a/mysql-test/suite/innodb/r/innodb-rollback.result b/mysql-test/suite/innodb/r/innodb-rollback.result new file mode 100644 index 00000000000..5eca7ad6967 --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb-rollback.result @@ -0,0 +1,10 @@ +CREATE TABLE t1 (a INT) ENGINE=InnoDB; +connect con1,localhost,root,,test; +ALTER TABLE t1; +connect con2,localhost,root,,test; +SELECT f() FROM t1; +ERROR 42000: FUNCTION test.f does not exist +disconnect con2; +disconnect con1; +connection default; +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/innodb-rollback.test b/mysql-test/suite/innodb/t/innodb-rollback.test new file mode 100644 index 00000000000..1d3e05b021f --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb-rollback.test @@ -0,0 +1,17 @@ +--source include/have_innodb.inc + +# +# MDEV-18632: wsrep_is_wsrep_xid: Conditional jump or move depends on uninitialised value +# +CREATE TABLE t1 (a INT) ENGINE=InnoDB; +--connect (con1,localhost,root,,test) +ALTER TABLE t1; +--connect (con2,localhost,root,,test) +--error ER_SP_DOES_NOT_EXIST +SELECT f() FROM t1; + +# Cleanup +--disconnect con2 +--disconnect con1 +--connection default +DROP TABLE t1; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index b0e58872ad8..5727934d23f 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -4712,7 +4712,7 @@ innobase_rollback( trx is being rolled back due to BF abort, clear XID in order to avoid writing it to rollback segment out of order. The XID will be reassigned when the transaction is replayed. */ - if (wsrep_is_wsrep_xid(trx->xid)) { + if (trx->state != TRX_STATE_NOT_STARTED && wsrep_is_wsrep_xid(trx->xid)) { trx->xid->null(); } #endif /* WITH_WSREP */