mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-34388: Stack overflow on Alpine Linux
page_is_corrupted(): Do not allocate the buffers from stack, but from the heap, in xb_fil_cur_open(). row_quiesce_write_cfg(): Issue one type of message when we fail to create the .cfg file. update_statistics_for_table(), read_statistics_for_table(), delete_statistics_for_table(), rename_table_in_stat_tables(): Use a common stack buffer for Index_stat, Column_stat, Table_stat. ha_connect::FileExists(): Invoke push_warning_printf() so that we can avoid allocating a buffer for snprintf(). translog_init_with_table(): Do not duplicate TRANSLOG_PAGE_SIZE_BUFF. Let us also globally enable the GCC 4.4 and clang 3.0 option -Wframe-larger-than=16384 to reduce the possibility of introducing such stack overflow in the future. For RocksDB and Mroonga we relax these limits. Reviewed by: Vladislav Lesin
This commit is contained in:
@@ -897,6 +897,9 @@ static int disable_binlog()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Ok as mysqlcheck is not multi threaded */
|
||||||
|
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
||||||
|
|
||||||
static int handle_request_for_tables(char *tables, size_t length,
|
static int handle_request_for_tables(char *tables, size_t length,
|
||||||
my_bool view, my_bool dont_quote)
|
my_bool view, my_bool dont_quote)
|
||||||
{
|
{
|
||||||
@@ -1028,9 +1031,6 @@ static void insert_table_name(DYNAMIC_ARRAY *arr, char *in, size_t dblen)
|
|||||||
insert_dynamic(arr, (uchar*) buf);
|
insert_dynamic(arr, (uchar*) buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ok as mysqlcheck is not multi threaded */
|
|
||||||
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
|
||||||
|
|
||||||
static void __attribute__((noinline)) print_result()
|
static void __attribute__((noinline)) print_result()
|
||||||
{
|
{
|
||||||
MYSQL_RES *res;
|
MYSQL_RES *res;
|
||||||
|
@@ -430,6 +430,8 @@ int main(int argc, char **argv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
||||||
|
|
||||||
void concurrency_loop(MYSQL *mysql, uint current, option_string *eptr)
|
void concurrency_loop(MYSQL *mysql, uint current, option_string *eptr)
|
||||||
{
|
{
|
||||||
unsigned int x;
|
unsigned int x;
|
||||||
@@ -525,6 +527,7 @@ void concurrency_loop(MYSQL *mysql, uint current, option_string *eptr)
|
|||||||
my_free(head_sptr);
|
my_free(head_sptr);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
PRAGMA_REENABLE_CHECK_STACK_FRAME
|
||||||
|
|
||||||
|
|
||||||
static struct my_option my_long_options[] =
|
static struct my_option my_long_options[] =
|
||||||
@@ -2295,6 +2298,7 @@ statement_cleanup(statement *stmt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
||||||
|
|
||||||
int
|
int
|
||||||
slap_connect(MYSQL *mysql)
|
slap_connect(MYSQL *mysql)
|
||||||
@@ -2328,3 +2332,4 @@ slap_connect(MYSQL *mysql)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
PRAGMA_REENABLE_CHECK_STACK_FRAME
|
||||||
|
@@ -41,6 +41,7 @@ SET(MY_WARNING_FLAGS
|
|||||||
-Wvla
|
-Wvla
|
||||||
-Wwrite-strings
|
-Wwrite-strings
|
||||||
-Wcast-function-type-strict
|
-Wcast-function-type-strict
|
||||||
|
-Wframe-larger-than=16384
|
||||||
)
|
)
|
||||||
|
|
||||||
# Warning flags that are in testing before moving
|
# Warning flags that are in testing before moving
|
||||||
|
@@ -217,7 +217,10 @@ xb_fil_cur_open(
|
|||||||
cursor->buf_size = XB_FIL_CUR_PAGES * cursor->page_size;
|
cursor->buf_size = XB_FIL_CUR_PAGES * cursor->page_size;
|
||||||
cursor->buf = static_cast<byte*>(aligned_malloc(cursor->buf_size,
|
cursor->buf = static_cast<byte*>(aligned_malloc(cursor->buf_size,
|
||||||
srv_page_size));
|
srv_page_size));
|
||||||
|
cursor->tmp_page = static_cast<byte*>(aligned_malloc(srv_page_size,
|
||||||
|
srv_page_size));
|
||||||
|
cursor->tmp_frame = static_cast<byte*>(aligned_malloc(srv_page_size,
|
||||||
|
srv_page_size));
|
||||||
cursor->buf_read = 0;
|
cursor->buf_read = 0;
|
||||||
cursor->buf_npages = 0;
|
cursor->buf_npages = 0;
|
||||||
cursor->buf_offset = 0;
|
cursor->buf_offset = 0;
|
||||||
@@ -245,15 +248,10 @@ xb_fil_cur_open(
|
|||||||
return(XB_FIL_CUR_SUCCESS);
|
return(XB_FIL_CUR_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Stack usage 131224 with clang */
|
|
||||||
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
|
||||||
|
|
||||||
static bool page_is_corrupted(const byte *page, ulint page_no,
|
static bool page_is_corrupted(const byte *page, ulint page_no,
|
||||||
const xb_fil_cur_t *cursor,
|
const xb_fil_cur_t *cursor,
|
||||||
const fil_space_t *space)
|
const fil_space_t *space)
|
||||||
{
|
{
|
||||||
byte tmp_frame[UNIV_PAGE_SIZE_MAX];
|
|
||||||
byte tmp_page[UNIV_PAGE_SIZE_MAX];
|
|
||||||
const ulint page_size = cursor->page_size;
|
const ulint page_size = cursor->page_size;
|
||||||
uint16_t page_type = fil_page_get_type(page);
|
uint16_t page_type = fil_page_get_type(page);
|
||||||
|
|
||||||
@@ -316,42 +314,43 @@ static bool page_is_corrupted(const byte *page, ulint page_no,
|
|||||||
&& !opt_extended_validation)
|
&& !opt_extended_validation)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
memcpy(tmp_page, page, page_size);
|
memcpy(cursor->tmp_page, page, page_size);
|
||||||
|
|
||||||
if (!space->crypt_data
|
if (!space->crypt_data
|
||||||
|| space->crypt_data->type == CRYPT_SCHEME_UNENCRYPTED
|
|| space->crypt_data->type == CRYPT_SCHEME_UNENCRYPTED
|
||||||
|| !fil_space_decrypt(space, tmp_frame, tmp_page)) {
|
|| !fil_space_decrypt(space, cursor->tmp_frame,
|
||||||
|
cursor->tmp_page)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (page_type != FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED) {
|
if (page_type != FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED) {
|
||||||
return buf_page_is_corrupted(false, tmp_page,
|
return buf_page_is_corrupted(false, cursor->tmp_page,
|
||||||
space->flags);
|
space->flags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (page_type == FIL_PAGE_PAGE_COMPRESSED) {
|
if (page_type == FIL_PAGE_PAGE_COMPRESSED) {
|
||||||
memcpy(tmp_page, page, page_size);
|
memcpy(cursor->tmp_page, page, page_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (page_type == FIL_PAGE_PAGE_COMPRESSED
|
if (page_type == FIL_PAGE_PAGE_COMPRESSED
|
||||||
|| page_type == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED) {
|
|| page_type == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED) {
|
||||||
ulint decomp = fil_page_decompress(tmp_frame, tmp_page,
|
ulint decomp = fil_page_decompress(cursor->tmp_frame,
|
||||||
|
cursor->tmp_page,
|
||||||
space->flags);
|
space->flags);
|
||||||
page_type = fil_page_get_type(tmp_page);
|
page_type = fil_page_get_type(cursor->tmp_page);
|
||||||
|
|
||||||
return (!decomp
|
return (!decomp
|
||||||
|| (decomp != srv_page_size
|
|| (decomp != srv_page_size
|
||||||
&& cursor->zip_size)
|
&& cursor->zip_size)
|
||||||
|| page_type == FIL_PAGE_PAGE_COMPRESSED
|
|| page_type == FIL_PAGE_PAGE_COMPRESSED
|
||||||
|| page_type == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED
|
|| page_type == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED
|
||||||
|| buf_page_is_corrupted(false, tmp_page,
|
|| buf_page_is_corrupted(false, cursor->tmp_page,
|
||||||
space->flags));
|
space->flags));
|
||||||
}
|
}
|
||||||
|
|
||||||
return buf_page_is_corrupted(false, page, space->flags);
|
return buf_page_is_corrupted(false, page, space->flags);
|
||||||
}
|
}
|
||||||
PRAGMA_REENABLE_CHECK_STACK_FRAME
|
|
||||||
|
|
||||||
/** Reads and verifies the next block of pages from the source
|
/** Reads and verifies the next block of pages from the source
|
||||||
file. Positions the cursor after the last read non-corrupted page.
|
file. Positions the cursor after the last read non-corrupted page.
|
||||||
@@ -514,7 +513,11 @@ xb_fil_cur_close(
|
|||||||
xb_fil_cur_t *cursor) /*!< in/out: source file cursor */
|
xb_fil_cur_t *cursor) /*!< in/out: source file cursor */
|
||||||
{
|
{
|
||||||
aligned_free(cursor->buf);
|
aligned_free(cursor->buf);
|
||||||
|
aligned_free(cursor->tmp_page);
|
||||||
|
aligned_free(cursor->tmp_frame);
|
||||||
cursor->buf = NULL;
|
cursor->buf = NULL;
|
||||||
|
cursor->tmp_page = NULL;
|
||||||
|
cursor->tmp_frame = NULL;
|
||||||
|
|
||||||
if (cursor->node != NULL) {
|
if (cursor->node != NULL) {
|
||||||
xb_fil_node_close_file(cursor->node);
|
xb_fil_node_close_file(cursor->node);
|
||||||
|
@@ -45,7 +45,9 @@ struct xb_fil_cur_t {
|
|||||||
xb_read_filt_t* read_filter; /*!< read filter */
|
xb_read_filt_t* read_filter; /*!< read filter */
|
||||||
xb_read_filt_ctxt_t read_filter_ctxt;
|
xb_read_filt_ctxt_t read_filter_ctxt;
|
||||||
/*!< read filter context */
|
/*!< read filter context */
|
||||||
byte* buf; /*!< read buffer */
|
byte* buf; /*!< read buffer of XB_FIL_CUR_PAGES */
|
||||||
|
byte* tmp_page; /*!< buffer for decrypting a page */
|
||||||
|
byte* tmp_frame; /*!< buffer for decompressing a page */
|
||||||
size_t buf_size; /*!< buffer size in bytes */
|
size_t buf_size; /*!< buffer size in bytes */
|
||||||
size_t buf_read; /*!< number of read bytes in buffer
|
size_t buf_read; /*!< number of read bytes in buffer
|
||||||
after the last cursor read */
|
after the last cursor read */
|
||||||
|
@@ -83,13 +83,13 @@
|
|||||||
|
|
||||||
/* Define pragmas to disable warnings for stack frame checking */
|
/* Define pragmas to disable warnings for stack frame checking */
|
||||||
|
|
||||||
#if defined(__clang__)
|
#ifdef __GNUC__
|
||||||
#define PRAGMA_DISABLE_CHECK_STACK_FRAME \
|
#define PRAGMA_DISABLE_CHECK_STACK_FRAME \
|
||||||
_Pragma("clang diagnostic push") \
|
_Pragma("GCC diagnostic push") \
|
||||||
_Pragma("clang diagnostic ignored \"-Wframe-larger-than=\"")
|
_Pragma("GCC diagnostic ignored \"-Wframe-larger-than=\"")
|
||||||
|
|
||||||
#define PRAGMA_REENABLE_CHECK_STACK_FRAME \
|
#define PRAGMA_REENABLE_CHECK_STACK_FRAME \
|
||||||
_Pragma("clang diagnostic pop")
|
_Pragma("GCC diagnostic pop")
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#define PRAGMA_DISABLE_CHECK_STACK_FRAME
|
#define PRAGMA_DISABLE_CHECK_STACK_FRAME
|
||||||
|
@@ -81,8 +81,7 @@ SET @saved_debug_dbug = @@SESSION.debug_dbug;
|
|||||||
SET SESSION debug_dbug="+d,ib_export_io_write_failure_1";
|
SET SESSION debug_dbug="+d,ib_export_io_write_failure_1";
|
||||||
FLUSH TABLES t1 FOR EXPORT;
|
FLUSH TABLES t1 FOR EXPORT;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed
|
Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
|
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
SET SESSION debug_dbug=@saved_debug_dbug;
|
SET SESSION debug_dbug=@saved_debug_dbug;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
@@ -91,8 +90,7 @@ INSERT INTO t1 VALUES (1);
|
|||||||
SET SESSION debug_dbug="+d,ib_export_io_write_failure_2";
|
SET SESSION debug_dbug="+d,ib_export_io_write_failure_2";
|
||||||
FLUSH TABLES t1 FOR EXPORT;
|
FLUSH TABLES t1 FOR EXPORT;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed
|
Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
|
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
SET SESSION debug_dbug=@saved_debug_dbug;
|
SET SESSION debug_dbug=@saved_debug_dbug;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
@@ -101,8 +99,7 @@ INSERT INTO t1 VALUES (1);
|
|||||||
SET SESSION debug_dbug="+d,ib_export_io_write_failure_3";
|
SET SESSION debug_dbug="+d,ib_export_io_write_failure_3";
|
||||||
FLUSH TABLES t1 FOR EXPORT;
|
FLUSH TABLES t1 FOR EXPORT;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed
|
Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
|
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
SET SESSION debug_dbug=@saved_debug_dbug;
|
SET SESSION debug_dbug=@saved_debug_dbug;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
@@ -111,8 +108,7 @@ INSERT INTO t1 VALUES (1);
|
|||||||
SET SESSION debug_dbug="+d,ib_export_io_write_failure_4";
|
SET SESSION debug_dbug="+d,ib_export_io_write_failure_4";
|
||||||
FLUSH TABLES t1 FOR EXPORT;
|
FLUSH TABLES t1 FOR EXPORT;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed
|
Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
|
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
SET SESSION debug_dbug=@saved_debug_dbug;
|
SET SESSION debug_dbug=@saved_debug_dbug;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
@@ -121,8 +117,7 @@ INSERT INTO t1 VALUES (1);
|
|||||||
SET SESSION debug_dbug="+d,ib_export_io_write_failure_5";
|
SET SESSION debug_dbug="+d,ib_export_io_write_failure_5";
|
||||||
FLUSH TABLES t1 FOR EXPORT;
|
FLUSH TABLES t1 FOR EXPORT;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed
|
Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
|
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
SET SESSION debug_dbug=@saved_debug_dbug;
|
SET SESSION debug_dbug=@saved_debug_dbug;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
@@ -131,8 +126,7 @@ INSERT INTO t1 VALUES (1);
|
|||||||
SET SESSION debug_dbug="+d,ib_export_io_write_failure_6";
|
SET SESSION debug_dbug="+d,ib_export_io_write_failure_6";
|
||||||
FLUSH TABLES t1 FOR EXPORT;
|
FLUSH TABLES t1 FOR EXPORT;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed
|
Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
|
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
SET SESSION debug_dbug=@saved_debug_dbug;
|
SET SESSION debug_dbug=@saved_debug_dbug;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
@@ -141,8 +135,7 @@ INSERT INTO t1 VALUES (1);
|
|||||||
SET SESSION debug_dbug="+d,ib_export_io_write_failure_7";
|
SET SESSION debug_dbug="+d,ib_export_io_write_failure_7";
|
||||||
FLUSH TABLES t1 FOR EXPORT;
|
FLUSH TABLES t1 FOR EXPORT;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed
|
Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
|
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
SET SESSION debug_dbug=@saved_debug_dbug;
|
SET SESSION debug_dbug=@saved_debug_dbug;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
@@ -151,8 +144,7 @@ INSERT INTO t1 VALUES (1);
|
|||||||
SET SESSION debug_dbug="+d,ib_export_io_write_failure_8";
|
SET SESSION debug_dbug="+d,ib_export_io_write_failure_8";
|
||||||
FLUSH TABLES t1 FOR EXPORT;
|
FLUSH TABLES t1 FOR EXPORT;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed
|
Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
|
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
SET SESSION debug_dbug=@saved_debug_dbug;
|
SET SESSION debug_dbug=@saved_debug_dbug;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
@@ -161,8 +153,7 @@ INSERT INTO t1 VALUES (1);
|
|||||||
SET SESSION debug_dbug="+d,ib_export_io_write_failure_9";
|
SET SESSION debug_dbug="+d,ib_export_io_write_failure_9";
|
||||||
FLUSH TABLES t1 FOR EXPORT;
|
FLUSH TABLES t1 FOR EXPORT;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed
|
Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
|
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
SET SESSION debug_dbug=@saved_debug_dbug;
|
SET SESSION debug_dbug=@saved_debug_dbug;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
@@ -171,8 +162,7 @@ INSERT INTO t1 VALUES (1);
|
|||||||
SET SESSION debug_dbug="+d,ib_export_io_write_failure_10";
|
SET SESSION debug_dbug="+d,ib_export_io_write_failure_10";
|
||||||
FLUSH TABLES t1 FOR EXPORT;
|
FLUSH TABLES t1 FOR EXPORT;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed
|
Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
|
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
SET SESSION debug_dbug=@saved_debug_dbug;
|
SET SESSION debug_dbug=@saved_debug_dbug;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
@@ -181,8 +171,7 @@ INSERT INTO t1 VALUES (1);
|
|||||||
SET SESSION debug_dbug="+d,ib_export_io_write_failure_11";
|
SET SESSION debug_dbug="+d,ib_export_io_write_failure_11";
|
||||||
FLUSH TABLES t1 FOR EXPORT;
|
FLUSH TABLES t1 FOR EXPORT;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed
|
Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
|
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
SET SESSION debug_dbug=@saved_debug_dbug;
|
SET SESSION debug_dbug=@saved_debug_dbug;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
@@ -191,8 +180,7 @@ INSERT INTO t1 VALUES (1);
|
|||||||
SET SESSION debug_dbug="+d,ib_export_io_write_failure_12";
|
SET SESSION debug_dbug="+d,ib_export_io_write_failure_12";
|
||||||
FLUSH TABLES t1 FOR EXPORT;
|
FLUSH TABLES t1 FOR EXPORT;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed
|
Warning 1004 Can't create file './test/t1.cfg' (errno: 9 "Bad file descriptor")
|
||||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
|
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
SET SESSION debug_dbug=@saved_debug_dbug;
|
SET SESSION debug_dbug=@saved_debug_dbug;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@@ -2785,9 +2785,6 @@ int collect_statistics_for_table(THD *thd, TABLE *table)
|
|||||||
After having been updated the statistical system tables are closed.
|
After having been updated the statistical system tables are closed.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Stack usage 20248 from clang */
|
|
||||||
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
|
||||||
|
|
||||||
int update_statistics_for_table(THD *thd, TABLE *table)
|
int update_statistics_for_table(THD *thd, TABLE *table)
|
||||||
{
|
{
|
||||||
TABLE_LIST tables[STATISTICS_TABLES];
|
TABLE_LIST tables[STATISTICS_TABLES];
|
||||||
@@ -2816,9 +2813,13 @@ int update_statistics_for_table(THD *thd, TABLE *table)
|
|||||||
|
|
||||||
save_binlog_format= thd->set_current_stmt_binlog_format_stmt();
|
save_binlog_format= thd->set_current_stmt_binlog_format_stmt();
|
||||||
|
|
||||||
|
char statbuf[sizeof(Index_stat)];
|
||||||
|
static_assert(sizeof(statbuf) >= sizeof(Table_stat), "");
|
||||||
|
static_assert(sizeof(statbuf) >= sizeof(Column_stat), "");
|
||||||
|
|
||||||
/* Update the statistical table table_stats */
|
/* Update the statistical table table_stats */
|
||||||
stat_table= tables[TABLE_STAT].table;
|
stat_table= tables[TABLE_STAT].table;
|
||||||
Table_stat table_stat(stat_table, table);
|
Table_stat &table_stat= *new(statbuf) Table_stat(stat_table, table);
|
||||||
restore_record(stat_table, s->default_values);
|
restore_record(stat_table, s->default_values);
|
||||||
table_stat.set_key_fields();
|
table_stat.set_key_fields();
|
||||||
err= table_stat.update_stat();
|
err= table_stat.update_stat();
|
||||||
@@ -2827,7 +2828,7 @@ int update_statistics_for_table(THD *thd, TABLE *table)
|
|||||||
|
|
||||||
/* Update the statistical table colum_stats */
|
/* Update the statistical table colum_stats */
|
||||||
stat_table= tables[COLUMN_STAT].table;
|
stat_table= tables[COLUMN_STAT].table;
|
||||||
Column_stat column_stat(stat_table, table);
|
Column_stat &column_stat= *new(statbuf) Column_stat(stat_table, table);
|
||||||
for (Field **field_ptr= table->field; *field_ptr; field_ptr++)
|
for (Field **field_ptr= table->field; *field_ptr; field_ptr++)
|
||||||
{
|
{
|
||||||
Field *table_field= *field_ptr;
|
Field *table_field= *field_ptr;
|
||||||
@@ -2844,7 +2845,7 @@ int update_statistics_for_table(THD *thd, TABLE *table)
|
|||||||
stat_table= tables[INDEX_STAT].table;
|
stat_table= tables[INDEX_STAT].table;
|
||||||
uint key;
|
uint key;
|
||||||
key_map::Iterator it(table->keys_in_use_for_query);
|
key_map::Iterator it(table->keys_in_use_for_query);
|
||||||
Index_stat index_stat(stat_table, table);
|
Index_stat &index_stat= *new(statbuf) Index_stat(stat_table, table);
|
||||||
|
|
||||||
while ((key= it++) != key_map::Iterator::BITMAP_END)
|
while ((key= it++) != key_map::Iterator::BITMAP_END)
|
||||||
{
|
{
|
||||||
@@ -2872,7 +2873,6 @@ int update_statistics_for_table(THD *thd, TABLE *table)
|
|||||||
new_trans.restore_old_transaction();
|
new_trans.restore_old_transaction();
|
||||||
DBUG_RETURN(rc);
|
DBUG_RETURN(rc);
|
||||||
}
|
}
|
||||||
PRAGMA_REENABLE_CHECK_STACK_FRAME
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2957,7 +2957,10 @@ read_statistics_for_table(THD *thd, TABLE *table,
|
|||||||
/* Read statistics from the statistical table table_stats */
|
/* Read statistics from the statistical table table_stats */
|
||||||
Table_statistics *read_stats= new_stats_cb->table_stats;
|
Table_statistics *read_stats= new_stats_cb->table_stats;
|
||||||
stat_table= stat_tables[TABLE_STAT].table;
|
stat_table= stat_tables[TABLE_STAT].table;
|
||||||
Table_stat table_stat(stat_table, table);
|
char statbuf[sizeof(Index_stat)];
|
||||||
|
static_assert(sizeof(statbuf) >= sizeof(Table_stat), "");
|
||||||
|
static_assert(sizeof(statbuf) >= sizeof(Column_stat), "");
|
||||||
|
Table_stat &table_stat= *new(statbuf) Table_stat(stat_table, table);
|
||||||
table_stat.set_key_fields();
|
table_stat.set_key_fields();
|
||||||
if (table_stat.get_stat_values(new_stats_cb->table_stats))
|
if (table_stat.get_stat_values(new_stats_cb->table_stats))
|
||||||
new_stats_cb->stats_available|= TABLE_STAT_TABLE;
|
new_stats_cb->stats_available|= TABLE_STAT_TABLE;
|
||||||
@@ -2965,7 +2968,7 @@ read_statistics_for_table(THD *thd, TABLE *table,
|
|||||||
/* Read statistics from the statistical table column_stats */
|
/* Read statistics from the statistical table column_stats */
|
||||||
stat_table= stat_tables[COLUMN_STAT].table;
|
stat_table= stat_tables[COLUMN_STAT].table;
|
||||||
ulong total_hist_size= 0;
|
ulong total_hist_size= 0;
|
||||||
Column_stat column_stat(stat_table, table);
|
Column_stat &column_stat= *new(statbuf) Column_stat(stat_table, table);
|
||||||
Column_statistics *column_statistics= new_stats_cb->table_stats->column_stats;
|
Column_statistics *column_statistics= new_stats_cb->table_stats->column_stats;
|
||||||
found= 0;
|
found= 0;
|
||||||
for (field_ptr= table_share->field;
|
for (field_ptr= table_share->field;
|
||||||
@@ -2990,7 +2993,7 @@ read_statistics_for_table(THD *thd, TABLE *table,
|
|||||||
|
|
||||||
/* Read statistics from the statistical table index_stats */
|
/* Read statistics from the statistical table index_stats */
|
||||||
stat_table= stat_tables[INDEX_STAT].table;
|
stat_table= stat_tables[INDEX_STAT].table;
|
||||||
Index_stat index_stat(stat_table, table);
|
Index_stat &index_stat= *new(statbuf) Index_stat(stat_table, table);
|
||||||
Index_statistics *index_statistics= new_stats_cb->table_stats->index_stats;
|
Index_statistics *index_statistics= new_stats_cb->table_stats->index_stats;
|
||||||
for (key_info= table_share->key_info,
|
for (key_info= table_share->key_info,
|
||||||
key_info_end= key_info + table_share->keys;
|
key_info_end= key_info + table_share->keys;
|
||||||
@@ -3285,9 +3288,6 @@ end:
|
|||||||
The function is called when executing the statement DROP TABLE 'tab'.
|
The function is called when executing the statement DROP TABLE 'tab'.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Stack size 20248 with clang */
|
|
||||||
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
|
||||||
|
|
||||||
int delete_statistics_for_table(THD *thd, const LEX_CSTRING *db,
|
int delete_statistics_for_table(THD *thd, const LEX_CSTRING *db,
|
||||||
const LEX_CSTRING *tab)
|
const LEX_CSTRING *tab)
|
||||||
{
|
{
|
||||||
@@ -3311,7 +3311,10 @@ int delete_statistics_for_table(THD *thd, const LEX_CSTRING *db,
|
|||||||
|
|
||||||
/* Delete statistics on table from the statistical table index_stats */
|
/* Delete statistics on table from the statistical table index_stats */
|
||||||
stat_table= tables[INDEX_STAT].table;
|
stat_table= tables[INDEX_STAT].table;
|
||||||
Index_stat index_stat(stat_table, db, tab);
|
char statbuf[sizeof(Index_stat)];
|
||||||
|
static_assert(sizeof(statbuf) >= sizeof(Table_stat), "");
|
||||||
|
static_assert(sizeof(statbuf) >= sizeof(Column_stat), "");
|
||||||
|
Index_stat &index_stat= *new(statbuf) Index_stat(stat_table, db, tab);
|
||||||
index_stat.set_full_table_name();
|
index_stat.set_full_table_name();
|
||||||
while (index_stat.find_next_stat_for_prefix(2))
|
while (index_stat.find_next_stat_for_prefix(2))
|
||||||
{
|
{
|
||||||
@@ -3322,7 +3325,7 @@ int delete_statistics_for_table(THD *thd, const LEX_CSTRING *db,
|
|||||||
|
|
||||||
/* Delete statistics on table from the statistical table column_stats */
|
/* Delete statistics on table from the statistical table column_stats */
|
||||||
stat_table= tables[COLUMN_STAT].table;
|
stat_table= tables[COLUMN_STAT].table;
|
||||||
Column_stat column_stat(stat_table, db, tab);
|
Column_stat &column_stat= *new(statbuf) Column_stat(stat_table, db, tab);
|
||||||
column_stat.set_full_table_name();
|
column_stat.set_full_table_name();
|
||||||
while (column_stat.find_next_stat_for_prefix(2))
|
while (column_stat.find_next_stat_for_prefix(2))
|
||||||
{
|
{
|
||||||
@@ -3333,7 +3336,7 @@ int delete_statistics_for_table(THD *thd, const LEX_CSTRING *db,
|
|||||||
|
|
||||||
/* Delete statistics on table from the statistical table table_stats */
|
/* Delete statistics on table from the statistical table table_stats */
|
||||||
stat_table= tables[TABLE_STAT].table;
|
stat_table= tables[TABLE_STAT].table;
|
||||||
Table_stat table_stat(stat_table, db, tab);
|
Table_stat &table_stat= *new(statbuf) Table_stat(stat_table, db, tab);
|
||||||
table_stat.set_key_fields();
|
table_stat.set_key_fields();
|
||||||
if (table_stat.find_stat())
|
if (table_stat.find_stat())
|
||||||
{
|
{
|
||||||
@@ -3356,7 +3359,6 @@ int delete_statistics_for_table(THD *thd, const LEX_CSTRING *db,
|
|||||||
new_trans.restore_old_transaction();
|
new_trans.restore_old_transaction();
|
||||||
DBUG_RETURN(rc);
|
DBUG_RETURN(rc);
|
||||||
}
|
}
|
||||||
PRAGMA_REENABLE_CHECK_STACK_FRAME
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -3725,7 +3727,6 @@ int rename_indexes_in_stat_table(THD *thd, TABLE *tab,
|
|||||||
int rc= 0;
|
int rc= 0;
|
||||||
uint duplicate_counter= 0;
|
uint duplicate_counter= 0;
|
||||||
List_iterator<Alter_info::RENAME_INDEX_STAT_PARAMS> it(*indexes);
|
List_iterator<Alter_info::RENAME_INDEX_STAT_PARAMS> it(*indexes);
|
||||||
Alter_info::RENAME_INDEX_STAT_PARAMS *index;
|
|
||||||
char tmp_name_buffer[32];
|
char tmp_name_buffer[32];
|
||||||
LEX_CSTRING tmp_name= {tmp_name_buffer, 0};
|
LEX_CSTRING tmp_name= {tmp_name_buffer, 0};
|
||||||
DBUG_ENTER("rename_indexes_in_stat_tables");
|
DBUG_ENTER("rename_indexes_in_stat_tables");
|
||||||
@@ -3746,15 +3747,16 @@ int rename_indexes_in_stat_table(THD *thd, TABLE *tab,
|
|||||||
/* Rename index in the statistical table index_stat */
|
/* Rename index in the statistical table index_stat */
|
||||||
|
|
||||||
stat_table= tables.table;
|
stat_table= tables.table;
|
||||||
|
char statbuf[sizeof(Index_stat)];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Loop over all indexes and rename to new name or temp name in case of
|
Loop over all indexes and rename to new name or temp name in case of
|
||||||
conflicts
|
conflicts
|
||||||
*/
|
*/
|
||||||
|
|
||||||
while ((index= it++))
|
while (Alter_info::RENAME_INDEX_STAT_PARAMS *index= it++)
|
||||||
{
|
{
|
||||||
Index_stat index_stat(stat_table, tab);
|
Index_stat &index_stat= *new(statbuf) Index_stat(stat_table, tab);
|
||||||
uint found= 0;
|
uint found= 0;
|
||||||
|
|
||||||
/* We have to make a loop as one index may have many entries */
|
/* We have to make a loop as one index may have many entries */
|
||||||
@@ -3822,12 +3824,11 @@ int rename_indexes_in_stat_table(THD *thd, TABLE *tab,
|
|||||||
the final name.
|
the final name.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Alter_info::RENAME_INDEX_STAT_PARAMS *index;
|
|
||||||
it.rewind();
|
it.rewind();
|
||||||
Index_stat index_stat(stat_table, tab);
|
Index_stat &index_stat= *new(statbuf) Index_stat(stat_table, tab);
|
||||||
stat_table->file->ha_index_init(index_stat.stat_key_idx, 0);
|
stat_table->file->ha_index_init(index_stat.stat_key_idx, 0);
|
||||||
|
|
||||||
while ((index= it++))
|
while (Alter_info::RENAME_INDEX_STAT_PARAMS *index= it++)
|
||||||
{
|
{
|
||||||
int err __attribute__((unused));
|
int err __attribute__((unused));
|
||||||
|
|
||||||
@@ -3901,9 +3902,6 @@ int rename_indexes_in_stat_table(THD *thd, TABLE *tab,
|
|||||||
The function is called when executing any statement that renames a table
|
The function is called when executing any statement that renames a table
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Stack size 20968 with clang */
|
|
||||||
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
|
||||||
|
|
||||||
int rename_table_in_stat_tables(THD *thd, const LEX_CSTRING *db,
|
int rename_table_in_stat_tables(THD *thd, const LEX_CSTRING *db,
|
||||||
const LEX_CSTRING *tab,
|
const LEX_CSTRING *tab,
|
||||||
const LEX_CSTRING *new_db,
|
const LEX_CSTRING *new_db,
|
||||||
@@ -3928,7 +3926,11 @@ int rename_table_in_stat_tables(THD *thd, const LEX_CSTRING *db,
|
|||||||
|
|
||||||
/* Rename table in the statistical table index_stats */
|
/* Rename table in the statistical table index_stats */
|
||||||
stat_table= tables[INDEX_STAT].table;
|
stat_table= tables[INDEX_STAT].table;
|
||||||
Index_stat index_stat(stat_table, db, tab);
|
char statbuf[sizeof(Index_stat)];
|
||||||
|
static_assert(sizeof(statbuf) >= sizeof(Table_stat), "");
|
||||||
|
static_assert(sizeof(statbuf) >= sizeof(Column_stat), "");
|
||||||
|
|
||||||
|
Index_stat &index_stat= *new(statbuf) Index_stat(stat_table, db, tab);
|
||||||
index_stat.set_full_table_name();
|
index_stat.set_full_table_name();
|
||||||
|
|
||||||
Stat_table_write_iter index_iter(&index_stat);
|
Stat_table_write_iter index_iter(&index_stat);
|
||||||
@@ -3945,7 +3947,7 @@ int rename_table_in_stat_tables(THD *thd, const LEX_CSTRING *db,
|
|||||||
|
|
||||||
/* Rename table in the statistical table column_stats */
|
/* Rename table in the statistical table column_stats */
|
||||||
stat_table= tables[COLUMN_STAT].table;
|
stat_table= tables[COLUMN_STAT].table;
|
||||||
Column_stat column_stat(stat_table, db, tab);
|
Column_stat &column_stat= *new(statbuf) Column_stat(stat_table, db, tab);
|
||||||
column_stat.set_full_table_name();
|
column_stat.set_full_table_name();
|
||||||
Stat_table_write_iter column_iter(&column_stat);
|
Stat_table_write_iter column_iter(&column_stat);
|
||||||
if (column_iter.init(2))
|
if (column_iter.init(2))
|
||||||
@@ -3961,7 +3963,7 @@ int rename_table_in_stat_tables(THD *thd, const LEX_CSTRING *db,
|
|||||||
|
|
||||||
/* Rename table in the statistical table table_stats */
|
/* Rename table in the statistical table table_stats */
|
||||||
stat_table= tables[TABLE_STAT].table;
|
stat_table= tables[TABLE_STAT].table;
|
||||||
Table_stat table_stat(stat_table, db, tab);
|
Table_stat &table_stat= *new(statbuf) Table_stat(stat_table, db, tab);
|
||||||
table_stat.set_key_fields();
|
table_stat.set_key_fields();
|
||||||
if (table_stat.find_stat())
|
if (table_stat.find_stat())
|
||||||
{
|
{
|
||||||
@@ -3981,7 +3983,6 @@ int rename_table_in_stat_tables(THD *thd, const LEX_CSTRING *db,
|
|||||||
new_trans.restore_old_transaction();
|
new_trans.restore_old_transaction();
|
||||||
DBUG_RETURN(rc);
|
DBUG_RETURN(rc);
|
||||||
}
|
}
|
||||||
PRAGMA_REENABLE_CHECK_STACK_FRAME
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -715,6 +715,10 @@ static void stop_timer(pool_timer_t *timer)
|
|||||||
|
|
||||||
@return a ready connection, or NULL on shutdown
|
@return a ready connection, or NULL on shutdown
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* ev[MAX_EVENTS] may bloat the stack frame beyond 16 KiB */
|
||||||
|
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
||||||
|
|
||||||
static TP_connection_generic * listener(worker_thread_t *current_thread,
|
static TP_connection_generic * listener(worker_thread_t *current_thread,
|
||||||
thread_group_t *thread_group)
|
thread_group_t *thread_group)
|
||||||
{
|
{
|
||||||
@@ -830,6 +834,7 @@ static TP_connection_generic * listener(worker_thread_t *current_thread,
|
|||||||
|
|
||||||
DBUG_RETURN(retval);
|
DBUG_RETURN(retval);
|
||||||
}
|
}
|
||||||
|
PRAGMA_REENABLE_CHECK_STACK_FRAME
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Adjust thread counters in group or global
|
Adjust thread counters in group or global
|
||||||
@@ -1157,6 +1162,9 @@ static bool too_many_threads(thread_group_t *thread_group)
|
|||||||
NULL is returned if timeout has expired,or on shutdown.
|
NULL is returned if timeout has expired,or on shutdown.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* ev[MAX_EVENTS] may bloat the stack frame beyond 16 KiB */
|
||||||
|
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
||||||
|
|
||||||
TP_connection_generic *get_event(worker_thread_t *current_thread,
|
TP_connection_generic *get_event(worker_thread_t *current_thread,
|
||||||
thread_group_t *thread_group, struct timespec *abstime)
|
thread_group_t *thread_group, struct timespec *abstime)
|
||||||
{
|
{
|
||||||
@@ -1262,6 +1270,7 @@ TP_connection_generic *get_event(worker_thread_t *current_thread,
|
|||||||
|
|
||||||
DBUG_RETURN(connection);
|
DBUG_RETURN(connection);
|
||||||
}
|
}
|
||||||
|
PRAGMA_REENABLE_CHECK_STACK_FRAME
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -2287,6 +2287,8 @@ str_to_offset(const char *str, uint length, long *offset)
|
|||||||
specification or other error.
|
specification or other error.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
||||||
|
|
||||||
Time_zone *
|
Time_zone *
|
||||||
my_tz_find(THD *thd, const String *name)
|
my_tz_find(THD *thd, const String *name)
|
||||||
{
|
{
|
||||||
@@ -2355,6 +2357,7 @@ my_tz_find(THD *thd, const String *name)
|
|||||||
|
|
||||||
DBUG_RETURN(result_tz);
|
DBUG_RETURN(result_tz);
|
||||||
}
|
}
|
||||||
|
PRAGMA_REENABLE_CHECK_STACK_FRAME
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -7010,9 +7010,6 @@ PRAGMA_REENABLE_CHECK_STACK_FRAME
|
|||||||
- user has file privilege
|
- user has file privilege
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Stack size 16664 in clang */
|
|
||||||
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
|
||||||
|
|
||||||
bool ha_connect::FileExists(const char *fn, bool bf)
|
bool ha_connect::FileExists(const char *fn, bool bf)
|
||||||
{
|
{
|
||||||
if (!fn || !*fn)
|
if (!fn || !*fn)
|
||||||
@@ -7048,10 +7045,8 @@ bool ha_connect::FileExists(const char *fn, bool bf)
|
|||||||
|
|
||||||
if (n < 0) {
|
if (n < 0) {
|
||||||
if (errno != ENOENT) {
|
if (errno != ENOENT) {
|
||||||
char buf[_MAX_PATH + 20];
|
push_warning_printf(table->in_use, Sql_condition::WARN_LEVEL_WARN, 0,
|
||||||
|
"Error %d for file %s", errno, filename);
|
||||||
snprintf(buf, sizeof(buf), "Error %d for file %s", errno, filename);
|
|
||||||
push_warning(table->in_use, Sql_condition::WARN_LEVEL_WARN, 0, buf);
|
|
||||||
return true;
|
return true;
|
||||||
} else
|
} else
|
||||||
return false;
|
return false;
|
||||||
@@ -7063,7 +7058,6 @@ bool ha_connect::FileExists(const char *fn, bool bf)
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
} // end of FileExists
|
} // end of FileExists
|
||||||
PRAGMA_REENABLE_CHECK_STACK_FRAME
|
|
||||||
|
|
||||||
// Called by SameString and NoFieldOptionChange
|
// Called by SameString and NoFieldOptionChange
|
||||||
bool ha_connect::CheckString(PCSZ str1, PCSZ str2)
|
bool ha_connect::CheckString(PCSZ str1, PCSZ str2)
|
||||||
|
@@ -432,9 +432,6 @@ row_quiesce_write_header(
|
|||||||
Write the table meta data after quiesce.
|
Write the table meta data after quiesce.
|
||||||
@return DB_SUCCESS or error code */
|
@return DB_SUCCESS or error code */
|
||||||
|
|
||||||
/* Stack size 20904 with clang */
|
|
||||||
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
|
||||||
|
|
||||||
static MY_ATTRIBUTE((nonnull, warn_unused_result))
|
static MY_ATTRIBUTE((nonnull, warn_unused_result))
|
||||||
dberr_t
|
dberr_t
|
||||||
row_quiesce_write_cfg(
|
row_quiesce_write_cfg(
|
||||||
@@ -452,8 +449,9 @@ row_quiesce_write_cfg(
|
|||||||
|
|
||||||
FILE* file = fopen(name, "w+b");
|
FILE* file = fopen(name, "w+b");
|
||||||
|
|
||||||
if (file == NULL) {
|
if (!file) {
|
||||||
ib_errf(thd, IB_LOG_LEVEL_WARN, ER_CANT_CREATE_FILE,
|
fail:
|
||||||
|
ib_senderrf(thd, IB_LOG_LEVEL_WARN, ER_CANT_CREATE_FILE,
|
||||||
name, errno, strerror(errno));
|
name, errno, strerror(errno));
|
||||||
|
|
||||||
err = DB_IO_ERROR;
|
err = DB_IO_ERROR;
|
||||||
@@ -468,31 +466,18 @@ row_quiesce_write_cfg(
|
|||||||
err = row_quiesce_write_indexes(table, file, thd);
|
err = row_quiesce_write_indexes(table, file, thd);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fflush(file) != 0) {
|
if (fflush(file)) {
|
||||||
|
std::ignore = fclose(file);
|
||||||
char msg[BUFSIZ];
|
goto fail;
|
||||||
|
|
||||||
snprintf(msg, sizeof(msg), "%s flush() failed", name);
|
|
||||||
|
|
||||||
ib_senderrf(
|
|
||||||
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
|
|
||||||
(ulong) errno, strerror(errno), msg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fclose(file) != 0) {
|
if (fclose(file)) {
|
||||||
char msg[BUFSIZ];
|
goto fail;
|
||||||
|
|
||||||
snprintf(msg, sizeof(msg), "%s flose() failed", name);
|
|
||||||
|
|
||||||
ib_senderrf(
|
|
||||||
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
|
|
||||||
(ulong) errno, strerror(errno), msg);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return(err);
|
return(err);
|
||||||
}
|
}
|
||||||
PRAGMA_REENABLE_CHECK_STACK_FRAME
|
|
||||||
|
|
||||||
/*********************************************************************//**
|
/*********************************************************************//**
|
||||||
Check whether a table has an FTS index defined on it.
|
Check whether a table has an FTS index defined on it.
|
||||||
|
@@ -3605,9 +3605,6 @@ static my_bool translog_is_LSN_chunk(uchar type)
|
|||||||
@retval 1 Error
|
@retval 1 Error
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Stack size 26120 from clang */
|
|
||||||
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
|
||||||
|
|
||||||
my_bool translog_init_with_table(const char *directory,
|
my_bool translog_init_with_table(const char *directory,
|
||||||
uint32 log_file_max_size,
|
uint32 log_file_max_size,
|
||||||
uint32 server_version,
|
uint32 server_version,
|
||||||
@@ -3861,6 +3858,7 @@ my_bool translog_init_with_table(const char *directory,
|
|||||||
|
|
||||||
if (logs_found)
|
if (logs_found)
|
||||||
{
|
{
|
||||||
|
TRANSLOG_PAGE_SIZE_BUFF psize_buff;
|
||||||
TRANSLOG_ADDRESS current_page= sure_page;
|
TRANSLOG_ADDRESS current_page= sure_page;
|
||||||
my_bool pageok;
|
my_bool pageok;
|
||||||
|
|
||||||
@@ -3901,7 +3899,6 @@ my_bool translog_init_with_table(const char *directory,
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
TRANSLOG_VALIDATOR_DATA data;
|
TRANSLOG_VALIDATOR_DATA data;
|
||||||
TRANSLOG_PAGE_SIZE_BUFF psize_buff;
|
|
||||||
uchar *page;
|
uchar *page;
|
||||||
data.addr= ¤t_page;
|
data.addr= ¤t_page;
|
||||||
if ((page= translog_get_page(&data, psize_buff.buffer, NULL)) == NULL)
|
if ((page= translog_get_page(&data, psize_buff.buffer, NULL)) == NULL)
|
||||||
@@ -3950,7 +3947,6 @@ my_bool translog_init_with_table(const char *directory,
|
|||||||
if (logs_found && !old_log_was_recovered && old_flags == flags)
|
if (logs_found && !old_log_was_recovered && old_flags == flags)
|
||||||
{
|
{
|
||||||
TRANSLOG_VALIDATOR_DATA data;
|
TRANSLOG_VALIDATOR_DATA data;
|
||||||
TRANSLOG_PAGE_SIZE_BUFF psize_buff;
|
|
||||||
uchar *page;
|
uchar *page;
|
||||||
uint16 chunk_offset;
|
uint16 chunk_offset;
|
||||||
data.addr= &last_valid_page;
|
data.addr= &last_valid_page;
|
||||||
@@ -4241,7 +4237,6 @@ err:
|
|||||||
ma_message_no_user(0, "log initialization failed");
|
ma_message_no_user(0, "log initialization failed");
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
PRAGMA_REENABLE_CHECK_STACK_FRAME
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -1558,7 +1558,7 @@ uint _ma_state_info_write(MARIA_SHARE *share, uint pWrite)
|
|||||||
@retval 1 Error
|
@retval 1 Error
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Stack size 26376 from clang */
|
/* MARIA_STATE_INFO_SIZE + MARIA_STATE_EXTRA_SIZE == 25559 */
|
||||||
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
||||||
|
|
||||||
uint _ma_state_info_write_sub(File file, MARIA_STATE_INFO *state, uint pWrite)
|
uint _ma_state_info_write_sub(File file, MARIA_STATE_INFO *state, uint pWrite)
|
||||||
|
@@ -4913,6 +4913,7 @@ static int flush_cached_blocks(PAGECACHE *pagecache,
|
|||||||
@retval PCFLUSH_PINNED Pinned blocks was met and skipped.
|
@retval PCFLUSH_PINNED Pinned blocks was met and skipped.
|
||||||
@retval PCFLUSH_PINNED_AND_ERROR PCFLUSH_ERROR and PCFLUSH_PINNED.
|
@retval PCFLUSH_PINNED_AND_ERROR PCFLUSH_ERROR and PCFLUSH_PINNED.
|
||||||
*/
|
*/
|
||||||
|
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
||||||
|
|
||||||
static int flush_pagecache_blocks_int(PAGECACHE *pagecache,
|
static int flush_pagecache_blocks_int(PAGECACHE *pagecache,
|
||||||
PAGECACHE_FILE *file,
|
PAGECACHE_FILE *file,
|
||||||
@@ -5242,6 +5243,7 @@ int flush_pagecache_blocks_with_filter(PAGECACHE *pagecache,
|
|||||||
pagecache_pthread_mutex_unlock(&pagecache->cache_lock);
|
pagecache_pthread_mutex_unlock(&pagecache->cache_lock);
|
||||||
DBUG_RETURN(res);
|
DBUG_RETURN(res);
|
||||||
}
|
}
|
||||||
|
PRAGMA_REENABLE_CHECK_STACK_FRAME
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -277,6 +277,7 @@ int maria_recovery_from_log(void)
|
|||||||
@retval 0 OK
|
@retval 0 OK
|
||||||
@retval !=0 Error
|
@retval !=0 Error
|
||||||
*/
|
*/
|
||||||
|
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
||||||
|
|
||||||
int maria_apply_log(LSN from_lsn, LSN end_redo_lsn, LSN end_undo_lsn,
|
int maria_apply_log(LSN from_lsn, LSN end_redo_lsn, LSN end_undo_lsn,
|
||||||
enum maria_apply_log_way apply,
|
enum maria_apply_log_way apply,
|
||||||
@@ -562,6 +563,7 @@ end:
|
|||||||
*/
|
*/
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
|
PRAGMA_REENABLE_CHECK_STACK_FRAME
|
||||||
|
|
||||||
|
|
||||||
/* very basic info about the record's header */
|
/* very basic info about the record's header */
|
||||||
|
@@ -49,6 +49,14 @@ if(MSVC)
|
|||||||
message(FATAL_ERROR ${MRN_OLD_MSVC_MESSAGE})
|
message(FATAL_ERROR ${MRN_OLD_MSVC_MESSAGE})
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
else()
|
||||||
|
STRING(REGEX REPLACE "-Wframe-larger-than=[0-9]*" ""
|
||||||
|
CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
|
STRING(REGEX REPLACE "-Wframe-larger-than=[0-9]*" ""
|
||||||
|
CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
|
||||||
|
STRING(REGEX REPLACE "-Wframe-larger-than=[0-9]*" ""
|
||||||
|
CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
|
||||||
|
MY_CHECK_AND_SET_COMPILER_FLAG(-Wframe-larger-than=49152)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MRN_BUNDLED)
|
if(MRN_BUNDLED)
|
||||||
|
7
storage/mroonga/vendor/groonga/lib/expr.c
vendored
7
storage/mroonga/vendor/groonga/lib/expr.c
vendored
@@ -2459,6 +2459,10 @@ grn_proc_call(grn_ctx *ctx, grn_obj *proc, int nargs, grn_obj *caller)
|
|||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
# pragma GCC diagnostic push
|
||||||
|
# pragma GCC diagnostic ignored "-Wframe-larger-than="
|
||||||
|
#endif
|
||||||
inline static void
|
inline static void
|
||||||
grn_expr_exec_get_member_vector(grn_ctx *ctx,
|
grn_expr_exec_get_member_vector(grn_ctx *ctx,
|
||||||
grn_obj *expr,
|
grn_obj *expr,
|
||||||
@@ -3834,6 +3838,9 @@ exit :
|
|||||||
}
|
}
|
||||||
GRN_API_RETURN(val);
|
GRN_API_RETURN(val);
|
||||||
}
|
}
|
||||||
|
#ifdef __GNUC__
|
||||||
|
# pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
|
|
||||||
grn_obj *
|
grn_obj *
|
||||||
grn_expr_get_value(grn_ctx *ctx, grn_obj *expr, int offset)
|
grn_expr_get_value(grn_ctx *ctx, grn_obj *expr, int offset)
|
||||||
|
@@ -86,8 +86,6 @@ void test_no_instruments()
|
|||||||
cleanup_instruments();
|
cleanup_instruments();
|
||||||
}
|
}
|
||||||
|
|
||||||
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
|
||||||
|
|
||||||
void test_no_instances()
|
void test_no_instances()
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
@@ -218,7 +216,7 @@ void test_no_instances()
|
|||||||
ok(file == NULL, "no file");
|
ok(file == NULL, "no file");
|
||||||
ok(global_file_container.m_lost == 4, "lost 4");
|
ok(global_file_container.m_lost == 4, "lost 4");
|
||||||
|
|
||||||
char long_file_name[10000];
|
char long_file_name[5000];
|
||||||
int size= sizeof(long_file_name);
|
int size= sizeof(long_file_name);
|
||||||
memset(long_file_name, 'X', size);
|
memset(long_file_name, 'X', size);
|
||||||
|
|
||||||
@@ -247,7 +245,6 @@ void test_no_instances()
|
|||||||
cleanup_file_hash();
|
cleanup_file_hash();
|
||||||
cleanup_instruments();
|
cleanup_instruments();
|
||||||
}
|
}
|
||||||
PRAGMA_REENABLE_CHECK_STACK_FRAME
|
|
||||||
|
|
||||||
void test_with_instances()
|
void test_with_instances()
|
||||||
{
|
{
|
||||||
|
@@ -9,6 +9,13 @@ SET(CPACK_RPM_rocksdb-engine_PACKAGE_SUMMARY "RocksDB storage engine for MariaDB
|
|||||||
SET(CPACK_RPM_rocksdb-engine_PACKAGE_DESCRIPTION "The RocksDB storage engine is a high performance storage engine, aimed
|
SET(CPACK_RPM_rocksdb-engine_PACKAGE_DESCRIPTION "The RocksDB storage engine is a high performance storage engine, aimed
|
||||||
at maximising storage efficiency while maintaining InnoDB-like performance." PARENT_SCOPE)
|
at maximising storage efficiency while maintaining InnoDB-like performance." PARENT_SCOPE)
|
||||||
|
|
||||||
|
STRING(REGEX REPLACE "-Wframe-larger-than=[0-9]*" ""
|
||||||
|
CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
|
STRING(REGEX REPLACE "-Wframe-larger-than=[0-9]*" ""
|
||||||
|
CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
|
||||||
|
STRING(REGEX REPLACE "-Wframe-larger-than=[0-9]*" ""
|
||||||
|
CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
|
||||||
|
MY_CHECK_AND_SET_COMPILER_FLAG(-Wframe-larger-than=32768)
|
||||||
MY_CHECK_AND_SET_COMPILER_FLAG(-Wno-range-loop-construct)
|
MY_CHECK_AND_SET_COMPILER_FLAG(-Wno-range-loop-construct)
|
||||||
MY_CHECK_AND_SET_COMPILER_FLAG(-Wno-effc++ DEBUG RELWITHDEBINFO)
|
MY_CHECK_AND_SET_COMPILER_FLAG(-Wno-effc++ DEBUG RELWITHDEBINFO)
|
||||||
|
|
||||||
|
@@ -10454,6 +10454,7 @@ error:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PRAGMA_DISABLE_CHECK_STACK_FRAME
|
||||||
bool spider_db_conn_is_network_error(
|
bool spider_db_conn_is_network_error(
|
||||||
int error_num
|
int error_num
|
||||||
) {
|
) {
|
||||||
@@ -10470,3 +10471,4 @@ bool spider_db_conn_is_network_error(
|
|||||||
}
|
}
|
||||||
DBUG_RETURN(FALSE);
|
DBUG_RETURN(FALSE);
|
||||||
}
|
}
|
||||||
|
PRAGMA_REENABLE_CHECK_STACK_FRAME
|
||||||
|
Reference in New Issue
Block a user