From 90b66c169957962de612bc951cdf369cdfccc99c Mon Sep 17 00:00:00 2001 From: Daniel Bartholomew Date: Wed, 1 Aug 2018 12:09:33 -0400 Subject: [PATCH 1/5] bump the VERSION --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 59a439d4152..2eee908ea01 100644 --- a/VERSION +++ b/VERSION @@ -1,3 +1,3 @@ MYSQL_VERSION_MAJOR=10 MYSQL_VERSION_MINOR=0 -MYSQL_VERSION_PATCH=36 +MYSQL_VERSION_PATCH=37 From b963cbaf4bcfe2c510c38edeacc2d6b1cae2d7a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Fri, 3 Aug 2018 11:49:49 +0300 Subject: [PATCH 2/5] Follow-up fix to MDEV-16865: InnoDB fts_query() ignores KILL fts_query(): Remove a redundant condition (result will never be NULL), and instead check if *result is NULL, to prevent SIGSEGV in fts_query_free_result(). --- storage/innobase/fts/fts0que.cc | 2 +- storage/xtradb/fts/fts0que.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/storage/innobase/fts/fts0que.cc b/storage/innobase/fts/fts0que.cc index 7d4cd7a3646..78521df75d9 100644 --- a/storage/innobase/fts/fts0que.cc +++ b/storage/innobase/fts/fts0que.cc @@ -4019,7 +4019,7 @@ fts_query( if (trx_is_interrupted(trx)) { error = DB_INTERRUPTED; ut_free(lc_query_str); - if (result != NULL) { + if (*result) { fts_query_free_result(*result); } goto func_exit; diff --git a/storage/xtradb/fts/fts0que.cc b/storage/xtradb/fts/fts0que.cc index 50f198401f9..9966656e772 100644 --- a/storage/xtradb/fts/fts0que.cc +++ b/storage/xtradb/fts/fts0que.cc @@ -4038,7 +4038,7 @@ fts_query( if (trx_is_interrupted(trx)) { error = DB_INTERRUPTED; ut_free(lc_query_str); - if (result != NULL) { + if (*result) { fts_query_free_result(*result); } goto func_exit; From 9dfef6e29b98459a5077adb95d5b989d39e0db24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Fri, 3 Aug 2018 11:22:20 +0300 Subject: [PATCH 3/5] Fix -Wclass-memaccess warnings in InnoDB,XtraDB --- storage/innobase/buf/buf0buf.cc | 2 +- storage/innobase/buf/buf0lru.cc | 2 +- storage/innobase/include/dict0mem.h | 3 +++ storage/innobase/include/row0ftsort.h | 9 +++++++++ storage/innobase/row/row0ftsort.cc | 1 - storage/innobase/row/row0import.cc | 4 ++-- storage/innobase/trx/trx0trx.cc | 2 +- storage/xtradb/buf/buf0buf.cc | 2 +- storage/xtradb/buf/buf0lru.cc | 2 +- storage/xtradb/include/dict0mem.h | 3 +++ storage/xtradb/include/row0ftsort.h | 9 +++++++++ storage/xtradb/row/row0ftsort.cc | 1 - storage/xtradb/row/row0import.cc | 4 ++-- storage/xtradb/trx/trx0trx.cc | 2 +- 14 files changed, 34 insertions(+), 12 deletions(-) diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index f534f8906f4..11dceacf592 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -1611,7 +1611,7 @@ buf_relocate( } #endif /* UNIV_DEBUG */ - memcpy(dpage, bpage, sizeof *dpage); + new (dpage) buf_page_t(*bpage); ut_d(bpage->in_LRU_list = FALSE); ut_d(bpage->in_page_hash = FALSE); diff --git a/storage/innobase/buf/buf0lru.cc b/storage/innobase/buf/buf0lru.cc index 019dddb5863..5b0a2a7dd0c 100644 --- a/storage/innobase/buf/buf0lru.cc +++ b/storage/innobase/buf/buf0lru.cc @@ -1849,7 +1849,7 @@ func_exit: } else if (buf_page_get_state(bpage) == BUF_BLOCK_FILE_PAGE) { b = buf_page_alloc_descriptor(); ut_a(b); - memcpy(b, bpage, sizeof *b); + new (b) buf_page_t(*bpage); } ut_ad(buf_pool_mutex_own(buf_pool)); diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h index 394106235ef..872db7865d3 100644 --- a/storage/innobase/include/dict0mem.h +++ b/storage/innobase/include/dict0mem.h @@ -509,6 +509,9 @@ struct dict_field_t{ unsigned fixed_len:10; /*!< 0 or the fixed length of the column if smaller than DICT_ANTELOPE_MAX_INDEX_COL_LEN */ + + /** Zero-initialize all fields */ + dict_field_t() : col(NULL), name(NULL), prefix_len(0), fixed_len(0) {} }; /**********************************************************************//** diff --git a/storage/innobase/include/row0ftsort.h b/storage/innobase/include/row0ftsort.h index e949ba302b9..547937bac98 100644 --- a/storage/innobase/include/row0ftsort.h +++ b/storage/innobase/include/row0ftsort.h @@ -1,6 +1,7 @@ /***************************************************************************** Copyright (c) 2010, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2015, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -106,6 +107,14 @@ struct fts_tokenize_ctx { ib_rbt_t* cached_stopword;/*!< in: stopword list */ dfield_t sort_field[FTS_NUM_FIELDS_SORT]; /*!< in: sort field */ + + fts_tokenize_ctx() : + processed_len(0), init_pos(0), buf_used(0), + rows_added(), cached_stopword(NULL), sort_field() + { + memset(rows_added, 0, sizeof rows_added); + memset(sort_field, 0, sizeof sort_field); + } }; typedef struct fts_tokenize_ctx fts_tokenize_ctx_t; diff --git a/storage/innobase/row/row0ftsort.cc b/storage/innobase/row/row0ftsort.cc index 8a3d4573879..757e268c3a7 100644 --- a/storage/innobase/row/row0ftsort.cc +++ b/storage/innobase/row/row0ftsort.cc @@ -638,7 +638,6 @@ fts_parallel_tokenization( merge_file = psort_info->merge_file; blob_heap = mem_heap_create(512); memset(&doc, 0, sizeof(doc)); - memset(&t_ctx, 0, sizeof(t_ctx)); memset(mycount, 0, FTS_NUM_AUX_INDEX * sizeof(int)); doc.charset = fts_index_get_charset( diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc index dad55205bc2..ea020fac56e 100644 --- a/storage/innobase/row/row0import.cc +++ b/storage/innobase/row/row0import.cc @@ -2620,8 +2620,6 @@ row_import_cfg_read_index_fields( dict_field_t* field = index->m_fields; - memset(field, 0x0, sizeof(*field) * n_fields); - for (ulint i = 0; i < n_fields; ++i, ++field) { byte* ptr = row; @@ -2639,6 +2637,8 @@ row_import_cfg_read_index_fields( return(DB_IO_ERROR); } + new (field) dict_field_t(); + field->prefix_len = mach_read_from_4(ptr); ptr += sizeof(ib_uint32_t); diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc index 2401783648a..3d070e40570 100644 --- a/storage/innobase/trx/trx0trx.cc +++ b/storage/innobase/trx/trx0trx.cc @@ -140,7 +140,7 @@ trx_create(void) trx->global_read_view_heap = mem_heap_create(256); - trx->xid.formatID = -1; + trx->xid.null(); trx->op_info = ""; diff --git a/storage/xtradb/buf/buf0buf.cc b/storage/xtradb/buf/buf0buf.cc index 4ad19c778ec..cc6774cd2b3 100644 --- a/storage/xtradb/buf/buf0buf.cc +++ b/storage/xtradb/buf/buf0buf.cc @@ -1718,7 +1718,7 @@ buf_relocate( } #endif /* UNIV_DEBUG */ - memcpy(dpage, bpage, sizeof *dpage); + new (dpage) buf_page_t(*bpage); ut_d(bpage->in_LRU_list = FALSE); ut_d(bpage->in_page_hash = FALSE); diff --git a/storage/xtradb/buf/buf0lru.cc b/storage/xtradb/buf/buf0lru.cc index caa008e8a96..e00bc3955de 100644 --- a/storage/xtradb/buf/buf0lru.cc +++ b/storage/xtradb/buf/buf0lru.cc @@ -2112,7 +2112,7 @@ not_freed: } if (b) { - memcpy(b, bpage, sizeof *b); + new (b) buf_page_t(*bpage); } if (!buf_LRU_block_remove_hashed(bpage, zip)) { diff --git a/storage/xtradb/include/dict0mem.h b/storage/xtradb/include/dict0mem.h index a4f810652e0..e6c0aa1f252 100644 --- a/storage/xtradb/include/dict0mem.h +++ b/storage/xtradb/include/dict0mem.h @@ -516,6 +516,9 @@ struct dict_field_t{ unsigned fixed_len:10; /*!< 0 or the fixed length of the column if smaller than DICT_ANTELOPE_MAX_INDEX_COL_LEN */ + + /** Zero-initialize all fields */ + dict_field_t() : col(NULL), name(NULL), prefix_len(0), fixed_len(0) {} }; /**********************************************************************//** diff --git a/storage/xtradb/include/row0ftsort.h b/storage/xtradb/include/row0ftsort.h index e949ba302b9..547937bac98 100644 --- a/storage/xtradb/include/row0ftsort.h +++ b/storage/xtradb/include/row0ftsort.h @@ -1,6 +1,7 @@ /***************************************************************************** Copyright (c) 2010, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2015, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -106,6 +107,14 @@ struct fts_tokenize_ctx { ib_rbt_t* cached_stopword;/*!< in: stopword list */ dfield_t sort_field[FTS_NUM_FIELDS_SORT]; /*!< in: sort field */ + + fts_tokenize_ctx() : + processed_len(0), init_pos(0), buf_used(0), + rows_added(), cached_stopword(NULL), sort_field() + { + memset(rows_added, 0, sizeof rows_added); + memset(sort_field, 0, sizeof sort_field); + } }; typedef struct fts_tokenize_ctx fts_tokenize_ctx_t; diff --git a/storage/xtradb/row/row0ftsort.cc b/storage/xtradb/row/row0ftsort.cc index 2292083689c..bb9821d4484 100644 --- a/storage/xtradb/row/row0ftsort.cc +++ b/storage/xtradb/row/row0ftsort.cc @@ -641,7 +641,6 @@ fts_parallel_tokenization( merge_file = psort_info->merge_file; blob_heap = mem_heap_create(512); memset(&doc, 0, sizeof(doc)); - memset(&t_ctx, 0, sizeof(t_ctx)); memset(mycount, 0, FTS_NUM_AUX_INDEX * sizeof(int)); doc.charset = fts_index_get_charset( diff --git a/storage/xtradb/row/row0import.cc b/storage/xtradb/row/row0import.cc index dad55205bc2..ea020fac56e 100644 --- a/storage/xtradb/row/row0import.cc +++ b/storage/xtradb/row/row0import.cc @@ -2620,8 +2620,6 @@ row_import_cfg_read_index_fields( dict_field_t* field = index->m_fields; - memset(field, 0x0, sizeof(*field) * n_fields); - for (ulint i = 0; i < n_fields; ++i, ++field) { byte* ptr = row; @@ -2639,6 +2637,8 @@ row_import_cfg_read_index_fields( return(DB_IO_ERROR); } + new (field) dict_field_t(); + field->prefix_len = mach_read_from_4(ptr); ptr += sizeof(ib_uint32_t); diff --git a/storage/xtradb/trx/trx0trx.cc b/storage/xtradb/trx/trx0trx.cc index 8e62a7dba46..5f5ecba837e 100644 --- a/storage/xtradb/trx/trx0trx.cc +++ b/storage/xtradb/trx/trx0trx.cc @@ -276,7 +276,7 @@ trx_create(void) trx->distinct_page_access_hash = NULL; trx->take_stats = FALSE; - trx->xid.formatID = -1; + trx->xid.null(); trx->op_info = ""; From 769f6d2db72dd70ff2fef69bed02fb4124a682ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Fri, 3 Aug 2018 12:21:13 +0300 Subject: [PATCH 4/5] Fix -Wclass-memaccess in WSREP,InnoDB,XtraDB --- extra/mariabackup/backup_copy.cc | 19 ++++++++++++++++--- extra/mariabackup/wsrep.cc | 3 +-- sql/handler.h | 4 ++-- sql/wsrep_xid.cc | 5 ++--- storage/innobase/dict/dict0stats_bg.cc | 11 +++-------- storage/innobase/trx/trx0sys.cc | 12 +++++++----- storage/innobase/trx/trx0trx.cc | 3 +-- storage/xtradb/dict/dict0stats_bg.cc | 14 ++++---------- storage/xtradb/trx/trx0sys.cc | 12 +++++++----- storage/xtradb/trx/trx0trx.cc | 3 +-- 10 files changed, 44 insertions(+), 42 deletions(-) diff --git a/extra/mariabackup/backup_copy.cc b/extra/mariabackup/backup_copy.cc index 7cdc6b8e3a6..895ef744ea1 100644 --- a/extra/mariabackup/backup_copy.cc +++ b/extra/mariabackup/backup_copy.cc @@ -460,6 +460,21 @@ struct datafile_cur_t { size_t buf_size; size_t buf_read; size_t buf_offset; + + explicit datafile_cur_t(const char* filename = NULL) : + file(), thread_n(0), orig_buf(NULL), buf(NULL), buf_size(0), + buf_read(0), buf_offset(0) + { + memset(rel_path, 0, sizeof rel_path); + if (filename) { + strncpy(abs_path, filename, sizeof abs_path); + abs_path[(sizeof abs_path) - 1] = 0; + } else { + abs_path[0] = '\0'; + } + rel_path[0] = '\0'; + memset(&statinfo, 0, sizeof statinfo); + } }; static @@ -478,9 +493,7 @@ datafile_open(const char *file, datafile_cur_t *cursor, uint thread_n) { ulint success; - memset(cursor, 0, sizeof(datafile_cur_t)); - - strncpy(cursor->abs_path, file, sizeof(cursor->abs_path)); + new (cursor) datafile_cur_t(file); /* Get the relative path for the destination tablespace name, i.e. the one that can be appended to the backup root directory. Non-system diff --git a/extra/mariabackup/wsrep.cc b/extra/mariabackup/wsrep.cc index 3baa9e660d7..7b0b26d803a 100644 --- a/extra/mariabackup/wsrep.cc +++ b/extra/mariabackup/wsrep.cc @@ -179,8 +179,7 @@ xb_write_galera_info(bool incremental_prepare) return; } - memset(&xid, 0, sizeof(xid)); - xid.formatID = -1; + xid.null(); if (!trx_sys_read_wsrep_checkpoint(&xid)) { diff --git a/sql/handler.h b/sql/handler.h index d17bccab25c..42429e9dcbe 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -2,7 +2,7 @@ #define HANDLER_INCLUDED /* Copyright (c) 2000, 2016, Oracle and/or its affiliates. - Copyright (c) 2009, 2016, MariaDB + Copyright (c) 2009, 2018, MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -602,7 +602,7 @@ struct xid_t { bqual_length= b; memcpy(data, d, g+b); } - bool is_null() { return formatID == -1; } + bool is_null() const { return formatID == -1; } void null() { formatID= -1; } my_xid quick_get_my_xid() { diff --git a/sql/wsrep_xid.cc b/sql/wsrep_xid.cc index f7ea836d494..132956e88b3 100644 --- a/sql/wsrep_xid.cc +++ b/sql/wsrep_xid.cc @@ -129,12 +129,11 @@ void wsrep_get_SE_checkpoint(wsrep_uuid_t& uuid, wsrep_seqno_t& seqno) seqno= WSREP_SEQNO_UNDEFINED; XID xid; - memset(&xid, 0, sizeof(xid)); - xid.formatID= -1; + xid.null(); wsrep_get_SE_checkpoint(xid); - if (xid.formatID == -1) return; // nil XID + if (xid.is_null()) return; if (!wsrep_is_wsrep_xid(&xid)) { diff --git a/storage/innobase/dict/dict0stats_bg.cc b/storage/innobase/dict/dict0stats_bg.cc index 6f2f96c452e..9394ca2830d 100644 --- a/storage/innobase/dict/dict0stats_bg.cc +++ b/storage/innobase/dict/dict0stats_bg.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 2012, 2017, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. +Copyright (c) 2017, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -95,10 +95,7 @@ dict_stats_pool_init() /*****************************************************************//** Free the resources occupied by the recalc pool, called once during thread de-initialization. */ -static -void -dict_stats_pool_deinit() -/*====================*/ +static void dict_stats_pool_deinit() { ut_ad(!srv_read_only_mode); @@ -114,9 +111,7 @@ dict_stats_pool_deinit() */ recalc_pool_t recalc_empty_pool; defrag_pool_t defrag_empty_pool; - memset(&recalc_empty_pool, 0, sizeof(recalc_pool_t)); - memset(&defrag_empty_pool, 0, sizeof(defrag_pool_t)); - recalc_pool.swap(recalc_empty_pool); + recalc_pool.swap(recalc_empty_pool); defrag_pool.swap(defrag_empty_pool); } diff --git a/storage/innobase/trx/trx0sys.cc b/storage/innobase/trx/trx0sys.cc index 0246eaf32a8..da2e4917cb0 100644 --- a/storage/innobase/trx/trx0sys.cc +++ b/storage/innobase/trx/trx0sys.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. +Copyright (c) 2017, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -347,7 +347,7 @@ trx_sys_update_wsrep_checkpoint( mtr_t* mtr) { #ifdef UNIV_DEBUG - if (xid->formatID != -1 + if (!xid->is_null() && mach_read_from_4(sys_header + TRX_SYS_WSREP_XID_INFO + TRX_SYS_WSREP_XID_MAGIC_N_FLD) == TRX_SYS_WSREP_XID_MAGIC_N) { @@ -368,7 +368,7 @@ trx_sys_update_wsrep_checkpoint( #endif /* UNIV_DEBUG */ ut_ad(xid && mtr); - ut_a(xid->formatID == -1 || wsrep_is_wsrep_xid((const XID *)xid)); + ut_a(xid->is_null() || wsrep_is_wsrep_xid((const XID *)xid)); if (mach_read_from_4(sys_header + TRX_SYS_WSREP_XID_INFO + TRX_SYS_WSREP_XID_MAGIC_N_FLD) @@ -417,8 +417,10 @@ trx_sys_read_wsrep_checkpoint(XID* xid) if ((magic = mach_read_from_4(sys_header + TRX_SYS_WSREP_XID_INFO + TRX_SYS_WSREP_XID_MAGIC_N_FLD)) != TRX_SYS_WSREP_XID_MAGIC_N) { - memset(xid, 0, sizeof(*xid)); - xid->formatID = -1; + xid->null(); + xid->gtrid_length = 0; + xid->bqual_length = 0; + memset(xid->data, 0, sizeof xid->data); trx_sys_update_wsrep_checkpoint(xid, sys_header, &mtr); mtr_commit(&mtr); return false; diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc index 3c86adb84b4..58dc9445546 100644 --- a/storage/innobase/trx/trx0trx.cc +++ b/storage/innobase/trx/trx0trx.cc @@ -851,8 +851,7 @@ trx_start_low( } #ifdef WITH_WSREP - memset(&trx->xid, 0, sizeof(trx->xid)); - trx->xid.formatID = -1; + trx->xid.null(); #endif /* WITH_WSREP */ /* The initial value for trx->no: TRX_ID_MAX is used in diff --git a/storage/xtradb/dict/dict0stats_bg.cc b/storage/xtradb/dict/dict0stats_bg.cc index 884f62103f5..9394ca2830d 100644 --- a/storage/xtradb/dict/dict0stats_bg.cc +++ b/storage/xtradb/dict/dict0stats_bg.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 2012, 2017, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. +Copyright (c) 2017, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -95,17 +95,13 @@ dict_stats_pool_init() /*****************************************************************//** Free the resources occupied by the recalc pool, called once during thread de-initialization. */ -static -void -dict_stats_pool_deinit() -/*===========================*/ +static void dict_stats_pool_deinit() { ut_ad(!srv_read_only_mode); recalc_pool.clear(); defrag_pool.clear(); - - /* + /* recalc_pool may still have its buffer allocated. It will free it when its destructor is called. The problem is, memory leak detector is run before the recalc_pool's @@ -115,9 +111,7 @@ dict_stats_pool_deinit() */ recalc_pool_t recalc_empty_pool; defrag_pool_t defrag_empty_pool; - memset(&recalc_empty_pool, 0, sizeof(recalc_pool_t)); - memset(&defrag_empty_pool, 0, sizeof(defrag_pool_t)); - recalc_pool.swap(recalc_empty_pool); + recalc_pool.swap(recalc_empty_pool); defrag_pool.swap(defrag_empty_pool); } diff --git a/storage/xtradb/trx/trx0sys.cc b/storage/xtradb/trx/trx0sys.cc index 6108ab7ab94..30660df01f6 100644 --- a/storage/xtradb/trx/trx0sys.cc +++ b/storage/xtradb/trx/trx0sys.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. +Copyright (c) 2017, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -351,7 +351,7 @@ trx_sys_update_wsrep_checkpoint( mtr_t* mtr) { #ifdef UNIV_DEBUG - if (xid->formatID != -1 + if (!xid->is_null() && mach_read_from_4(sys_header + TRX_SYS_WSREP_XID_INFO + TRX_SYS_WSREP_XID_MAGIC_N_FLD) == TRX_SYS_WSREP_XID_MAGIC_N) { @@ -372,7 +372,7 @@ trx_sys_update_wsrep_checkpoint( #endif /* UNIV_DEBUG */ ut_ad(xid && mtr); - ut_a(xid->formatID == -1 || wsrep_is_wsrep_xid((const XID *)xid)); + ut_a(xid->is_null() || wsrep_is_wsrep_xid((const XID *)xid)); if (mach_read_from_4(sys_header + TRX_SYS_WSREP_XID_INFO + TRX_SYS_WSREP_XID_MAGIC_N_FLD) @@ -421,8 +421,10 @@ trx_sys_read_wsrep_checkpoint(XID* xid) if ((magic = mach_read_from_4(sys_header + TRX_SYS_WSREP_XID_INFO + TRX_SYS_WSREP_XID_MAGIC_N_FLD)) != TRX_SYS_WSREP_XID_MAGIC_N) { - memset(xid, 0, sizeof(*xid)); - xid->formatID = -1; + xid->null(); + xid->gtrid_length = 0; + xid->bqual_length = 0; + memset(xid->data, 0, sizeof xid->data); trx_sys_update_wsrep_checkpoint(xid, sys_header, &mtr); mtr_commit(&mtr); return false; diff --git a/storage/xtradb/trx/trx0trx.cc b/storage/xtradb/trx/trx0trx.cc index b51afa4febd..6a033fbeb09 100644 --- a/storage/xtradb/trx/trx0trx.cc +++ b/storage/xtradb/trx/trx0trx.cc @@ -1041,8 +1041,7 @@ trx_start_low( } #ifdef WITH_WSREP - memset(&trx->xid, 0, sizeof(trx->xid)); - trx->xid.formatID = -1; + trx->xid.null(); #endif /* WITH_WSREP */ /* The initial value for trx->no: TRX_ID_MAX is used in From 9d42eb5e28303adb4d9467ac3e9c3be35d46e643 Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Fri, 3 Aug 2018 12:30:50 +0300 Subject: [PATCH 5/5] Disable an unstable test --- mysql-test/suite/galera/disabled.def | 1 + 1 file changed, 1 insertion(+) diff --git a/mysql-test/suite/galera/disabled.def b/mysql-test/suite/galera/disabled.def index 397ad22dab8..2ec3787c3b6 100644 --- a/mysql-test/suite/galera/disabled.def +++ b/mysql-test/suite/galera/disabled.def @@ -30,3 +30,4 @@ query_cache : MDEV-15805 Test failure on galera.query_cache MW-416 : MDEV-13549 Galera test failures galera_wan : MDEV-13549 Galera test failures MW-388 : MDEV-13549 Galera test failures +galera_sst_mysqldump_with_key : MDEV-16890 Galera test failure