aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/bootstrap/bootparse.y18
-rw-r--r--src/backend/bootstrap/bootstrap.c3
2 files changed, 16 insertions, 5 deletions
diff --git a/src/backend/bootstrap/bootparse.y b/src/backend/bootstrap/bootparse.y
index 867f77076d0..de3695c7e05 100644
--- a/src/backend/bootstrap/bootparse.y
+++ b/src/backend/bootstrap/bootparse.y
@@ -22,7 +22,6 @@
#include "access/htup.h"
#include "access/itup.h"
#include "access/tupdesc.h"
-#include "access/xact.h"
#include "bootstrap/bootstrap.h"
#include "catalog/catalog.h"
#include "catalog/heap.h"
@@ -49,6 +48,7 @@
#include "storage/off.h"
#include "storage/smgr.h"
#include "tcop/dest.h"
+#include "utils/memutils.h"
#include "utils/rel.h"
@@ -63,19 +63,27 @@
#define YYMALLOC palloc
#define YYFREE pfree
+static MemoryContext per_line_ctx = NULL;
+
static void
do_start(void)
{
- StartTransactionCommand();
- elog(DEBUG4, "start transaction");
+ Assert(CurrentMemoryContext == CurTransactionContext);
+ /* First time through, create the per-line working context */
+ if (per_line_ctx == NULL)
+ per_line_ctx = AllocSetContextCreate(CurTransactionContext,
+ "bootstrap per-line processing",
+ ALLOCSET_DEFAULT_SIZES);
+ MemoryContextSwitchTo(per_line_ctx);
}
static void
do_end(void)
{
- CommitTransactionCommand();
- elog(DEBUG4, "commit transaction");
+ /* Reclaim memory allocated while processing this line */
+ MemoryContextSwitchTo(CurTransactionContext);
+ MemoryContextReset(per_line_ctx);
CHECK_FOR_INTERRUPTS(); /* allow SIGINT to kill bootstrap run */
if (isatty(0))
{
diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c
index 46c207c86c8..4c28b2b821a 100644
--- a/src/backend/bootstrap/bootstrap.c
+++ b/src/backend/bootstrap/bootstrap.c
@@ -18,6 +18,7 @@
#include <signal.h>
#include "access/htup_details.h"
+#include "access/xact.h"
#include "bootstrap/bootstrap.h"
#include "catalog/index.h"
#include "catalog/pg_collation.h"
@@ -496,7 +497,9 @@ BootstrapModeMain(void)
/*
* Process bootstrap input.
*/
+ StartTransactionCommand();
boot_yyparse();
+ CommitTransactionCommand();
/*
* We should now know about all mapped relations, so it's okay to write