pgpool2.git / summary / log / commit / refs

commit    b2dd33d8dde78419dfc53d147571a330e743af4c
Author:   Tatsuo Ishii <ishii@sraoss.co.jp>
Date:     Thu Aug 15 00:32:17 2019 +0000

    Fix temp table trace modules.
    
    CLOBBER_FREED_MEMORY revealed bug with usage of list package.


src/context/pool_session_context.c | 30 ++++++++++++++++++++++++++++++ src/include/context/pool_session_context.h | 1 + 2 files changed, 31 insertions(+) diff --git a/src/context/pool_session_context.c b/src/context/pool_session_context.c index 752bd4d52..a73d83fd1 100644 --- a/src/context/pool_session_context.c +++ b/src/context/pool_session_context.c @@ -1965,6 +1965,9 @@ pool_temp_tables_commit_pending(void) old_context = MemoryContextSwitchTo(session_context->memory_context); + pool_temp_tables_dump(); + +Retry: foreach(cell, session_context->temp_tables) { POOL_TEMP_TABLE * table = (POOL_TEMP_TABLE *)lfirst(cell); @@ -1981,6 +1984,8 @@ pool_temp_tables_commit_pending(void) ereport(DEBUG1, (errmsg("pool_temp_tables_commit_pending: remove: %s", table->tablename))); session_context->temp_tables = list_delete_ptr(session_context->temp_tables, table); + pool_temp_tables_dump(); + goto Retry; } } @@ -2003,6 +2008,9 @@ pool_temp_tables_remove_pending(void) old_context = MemoryContextSwitchTo(session_context->memory_context); + pool_temp_tables_dump(); + +Retry: foreach(cell, session_context->temp_tables) { POOL_TEMP_TABLE * table = (POOL_TEMP_TABLE *)lfirst(cell); @@ -2013,8 +2021,30 @@ pool_temp_tables_remove_pending(void) (errmsg("pool_temp_tables_remove_pending: remove: %s", table->tablename))); session_context->temp_tables = list_delete_ptr(session_context->temp_tables, table); + pool_temp_tables_dump(); + goto Retry; } } MemoryContextSwitchTo(old_context); } + +void +pool_temp_tables_dump(void) +{ +#ifdef TEMP_TABLES_DEBUG + ListCell *cell; + + if (!session_context) + ereport(ERROR, + (errmsg("pool_temp_tables_dump: session context is not initialized"))); + + foreach(cell, session_context->temp_tables) + { + POOL_TEMP_TABLE * table = (POOL_TEMP_TABLE *)lfirst(cell); + ereport(DEBUG1, + (errmsg("pool_temp_tables_dump: table %s state: %d", + table->tablename, table->state))); + } +#endif +} diff --git a/src/include/context/pool_session_context.h b/src/include/context/pool_session_context.h index e0cc2617d..1d03e4884 100644 --- a/src/include/context/pool_session_context.h +++ b/src/include/context/pool_session_context.h @@ -363,6 +363,7 @@ extern POOL_TEMP_TABLE * pool_temp_tables_find(char * tablename); extern void pool_temp_tables_delete(char * tablename, POOL_TEMP_TABLE_STATE state); extern void pool_temp_tables_commit_pending(void); extern void pool_temp_tables_remove_pending(void); +extern void pool_temp_tables_dump(void); #ifdef NOT_USED extern void pool_set_preferred_master_node_id(int node_id); [parent: 045f3731d580]