diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 19d11e0..e48703a 100644
*** a/src/backend/postmaster/postmaster.c
--- b/src/backend/postmaster/postmaster.c
*************** do_start_bgworker(RegisteredBgWorker *rw
*** 5529,5537 ****
  			/* Close the postmaster's sockets */
  			ClosePostmasterPorts(false);
  
! 			/* Do NOT release postmaster's working memory context */
  
- 			MyBgworkerEntry = &rw->rw_worker;
  			StartBackgroundWorker();
  			break;
  #endif
--- 5529,5547 ----
  			/* Close the postmaster's sockets */
  			ClosePostmasterPorts(false);
  
! 			/*
! 			 * Before blowing away PostmasterContext, save this bgworker's
! 			 * data where it can find it.
! 			 */
! 			MyBgworkerEntry = (BackgroundWorker *)
! 				MemoryContextAlloc(TopMemoryContext, sizeof(BackgroundWorker));
! 			memcpy(MyBgworkerEntry, &rw->rw_worker, sizeof(BackgroundWorker));
! 
! 			/* Release postmaster's working memory context */
! 			MemoryContextSwitchTo(TopMemoryContext);
! 			MemoryContextDelete(PostmasterContext);
! 			PostmasterContext = NULL;
  
  			StartBackgroundWorker();
  			break;
  #endif
