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]