summaryrefslogtreecommitdiff
path: root/sql/protocol.cc
diff options
context:
space:
mode:
authorBrave Galera Crew <devel@codership.com>2019-01-23 15:30:00 +0400
committerSergey Vojtovich <svoj@mariadb.org>2019-01-23 15:30:00 +0400
commit36a2a185fe18d31a644da46cfabd9757a379280c (patch)
tree00ca186ce2cfdc3ab7e4979336a384e2b51c5aa9 /sql/protocol.cc
parent382115b99297ceaa4c3067f79efb5c2515013be5 (diff)
downloadmariadb-git-36a2a185fe18d31a644da46cfabd9757a379280c.tar.gz
Galera4
Diffstat (limited to 'sql/protocol.cc')
-rw-r--r--sql/protocol.cc22
1 files changed, 20 insertions, 2 deletions
diff --git a/sql/protocol.cc b/sql/protocol.cc
index 7eee9283989..38eb8ac99f7 100644
--- a/sql/protocol.cc
+++ b/sql/protocol.cc
@@ -551,8 +551,26 @@ static uchar *net_store_length_fast(uchar *packet, size_t length)
void Protocol::end_statement()
{
- /* sanity check*/
- DBUG_ASSERT_IF_WSREP(!(WSREP(thd) && thd->wsrep_conflict_state == REPLAYING));
+#ifdef WITH_WSREP
+ /*
+ Commented out: This sanity check does not hold in general.
+ Thd->LOCK_thd_data() must be unlocked before sending response
+ to client, so BF abort may sneak in here.
+ DBUG_ASSERT(!WSREP(thd) || thd->wsrep_conflict_state() == NO_CONFLICT);
+ */
+
+ /*
+ sanity check, don't send end statement while replaying
+ */
+ DBUG_ASSERT(thd->wsrep_trx().state() != wsrep::transaction::s_replaying);
+ if (WSREP(thd) && thd->wsrep_trx().state() ==
+ wsrep::transaction::s_replaying)
+ {
+ WSREP_ERROR("attempting net_end_statement while replaying");
+ return;
+ }
+#endif /* WITH_WSREP */
+
DBUG_ENTER("Protocol::end_statement");
DBUG_ASSERT(! thd->get_stmt_da()->is_sent());
bool error= FALSE;