index 0b941ae12ca441b5e75a3b6fb9a8561f21f8923c..edc4a82b02f718d97b644adc52e6411dbabe80ea 100644 (file)
@@ -1353,14 +1353,6 @@ _bt_begin_parallel(BTBuildState *buildstate, bool isconcurrent, int request)
pcxt = CreateParallelContext("postgres", "_bt_parallel_build_main",
request);
- /* If no DSM segment was available, back out (do serial build) */
- if (pcxt->seg == NULL)
- {
- DestroyParallelContext(pcxt);
- ExitParallelMode();
- return;
- }
-
scantuplesortstates = leaderparticipates ? request + 1 : request;
/*
@@ -1404,6 +1396,16 @@ _bt_begin_parallel(BTBuildState *buildstate, bool isconcurrent, int request)
/* Everyone's had a chance to ask for space, so now create the DSM */
InitializeParallelDSM(pcxt);
+ /* If no DSM segment was available, back out (do serial build) */
+ if (pcxt->seg == NULL)
+ {
+ if (IsMVCCSnapshot(snapshot))
+ UnregisterSnapshot(snapshot);
+ DestroyParallelContext(pcxt);
+ ExitParallelMode();
+ return;
+ }
+
/* Store shared build state, for which we reserved space */
btshared = (BTShared *) shm_toc_allocate(pcxt->toc, estbtshared);
/* Initialize immutable state */