From b2dd33d8dde78419dfc53d147571a330e743af4c Mon Sep 17 00:00:00 2001 From: Tatsuo Ishii Date: Thu, 15 Aug 2019 09:32:17 +0900 Subject: [PATCH] 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); -- 2.39.5