|
Note: it's a silly test case, so I'm setting priority to Minor and don't think there's any rush to fix it, but still it's weird that this particular statement produces the warnings.
==5011== 2,100 bytes in 1 blocks are still reachable in loss record 2 of 3
|
==5011== at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
|
==5011== by 0xCCB98E: sf_malloc (safemalloc.c:105)
|
==5011== by 0xCB667F: my_malloc (my_malloc.c:41)
|
==5011== by 0xCB68A2: my_realloc (my_malloc.c:92)
|
==5011== by 0x618C4B: my_yyoverflow(short**, YYSTYPE**, unsigned long*) (sql_parse.cc:5417)
|
==5011== by 0x7636EC: MYSQLparse(void*) (sql_yacc.cc:18150)
|
==5011== by 0x61D8A4: parse_sql(THD*, Parser_state*, Object_creation_ctx*) (sql_parse.cc:7644)
|
==5011== by 0x61985C: mysql_parse(THD*, char*, unsigned int, Parser_state*) (sql_parse.cc:5724)
|
==5011== by 0x60D020: dispatch_command(enum_server_command, THD*, char*, unsigned int) (sql_parse.cc:1071)
|
==5011== by 0x60C230: do_command(THD*) (sql_parse.cc:794)
|
==5011== by 0x713028: do_handle_one_connection(THD*) (sql_connect.cc:1266)
|
==5011== by 0x712A0F: handle_one_connection (sql_connect.cc:1181)
|
==5011== by 0x9614C7: pfs_spawn_thread (pfs.cc:1015)
|
==5011== by 0x545AE99: start_thread (pthread_create.c:308)
|
==5011== by 0x619CCBC: clone (clone.S:112)
|
bzr version-info
revision-id: sanja@montyprogram.com-20130718081618-6ax63urznfnqmzgt
|
revno: 3839
|
branch-nick: 5.5
|
Built with BUILD/compile-pentium-debug-max-no-ndb
Also reproducible on 10.0. Couldn't reproduce on 5.3.
5400:bool my_yyoverflow(short **yyss, YYSTYPE **yyvs, ulong *yystacksize)
|
5401:{
|
5402: Yacc_state *state= & current_thd->m_parser_state->m_yacc;
|
5403: ulong old_info=0;
|
5404: DBUG_ASSERT(state);
|
5405: if ((uint) *yystacksize >= MY_YACC_MAX)
|
5406: return 1;
|
5407: if (!state->yacc_yyvs)
|
5408: old_info= *yystacksize;
|
5409: *yystacksize= set_zone((*yystacksize)*2,MY_YACC_INIT,MY_YACC_MAX);
|
5410: if (!(state->yacc_yyvs= (uchar*)
|
5411: my_realloc(state->yacc_yyvs,
|
5412: *yystacksize*sizeof(**yyvs),
|
5413: MYF(MY_ALLOW_ZERO_PTR | MY_FREE_ON_ERROR))) ||
|
5414: !(state->yacc_yyss= (uchar*)
|
5415: my_realloc(state->yacc_yyss,
|
5416: *yystacksize*sizeof(**yyss),
|
5417: MYF(MY_ALLOW_ZERO_PTR | MY_FREE_ON_ERROR))))
|
5418: return 1;
|
5419: if (old_info)
|
5420: {
|
5421: /*
|
5422: Only copy the old stack on the first call to my_yyoverflow(),
|
5423: when replacing a static stack (YYINITDEPTH) by a dynamic stack.
|
5424: For subsequent calls, my_realloc already did preserve the old stack.
|
5425: */
|
5426: memcpy(state->yacc_yyss, *yyss, old_info*sizeof(**yyss));
|
5427: memcpy(state->yacc_yyvs, *yyvs, old_info*sizeof(**yyvs));
|
5428: }
|
5429: *yyss= (short*) state->yacc_yyss;
|
5430: *yyvs= (YYSTYPE*) state->yacc_yyvs;
|
5431: return 0;
|
5432:}
|
Test case:
CREATE TABLE t1 (f1 INT);
|
|
--delimiter |
|
|
CREATE TABLE IF NOT EXISTS t1 ( v1 INT AS( COT( 1 % CASE POWER( 1, ROUND( 1, IF( 1, 2, CASE 1 WHEN 2 THEN 3 > CASE 4 WHEN 5 THEN 6 * ( POW( ( LEAST( 7, ( 8 * ( ( ( ( ( CASE 9 WHEN 1 THEN 2 WHEN ( INTERVAL( ( IF( 1, ( 2 AND ( ( NULLIF( 3, 4 ) ) ) ), 5 ) ), 6 ) ) THEN 7 ELSE 8 END ) ) ) ) ) ) ) ), 9 ) ) WHEN 2 THEN 3 ELSE 4 END ELSE 5 END AND 9 ) ) ) WHEN 1 THEN 2 END ) ) PERSISTENT ) ; CREATE TABLE IF NOT EXISTS t2 (i INT) |
|
|
--delimiter ;
|
|
DROP TABLE t1, t2;
|
|