@@ -101,10 +101,10 @@ static List *GetRemoteBackendQueryStates(PGPROC *leader,
101101 ExplainFormat format );
102102
103103/* Shared memory variables */
104- shm_toc * toc = NULL ;
104+ shm_toc * toc = NULL ;
105105RemoteUserIdResult * counterpart_userid = NULL ;
106- pg_qs_params * params = NULL ;
107- shm_mq * mq = NULL ;
106+ pg_qs_params * params = NULL ;
107+ shm_mq * mq = NULL ;
108108
109109/*
110110 * Estimate amount of shared memory needed.
@@ -208,7 +208,7 @@ _PG_init(void)
208208 || UserIdPollReason == INVALID_PROCSIGNAL )
209209 {
210210 ereport (WARNING , (errcode (ERRCODE_INSUFFICIENT_RESOURCES ),
211- errmsg ("pg_query_state isn't loaded: insufficient custom ProcSignal slots" )));
211+ errmsg ("pg_query_state isn't loaded: insufficient custom ProcSignal slots" )));
212212 return ;
213213 }
214214
@@ -435,7 +435,7 @@ deserialize_stack(char *src, int stack_depth)
435435{
436436 List * result = NIL ;
437437 char * curr_ptr = src ;
438- int i ;
438+ int i ;
439439
440440 for (i = 0 ; i < stack_depth ; i ++ )
441441 {
@@ -599,10 +599,10 @@ pg_query_state(PG_FUNCTION_ARGS)
599599 /* print warnings if exist */
600600 if (msg -> warnings & TIMINIG_OFF_WARNING )
601601 ereport (WARNING , (errcode (ERRCODE_WARNING ),
602- errmsg ("timing statistics disabled" )));
602+ errmsg ("timing statistics disabled" )));
603603 if (msg -> warnings & BUFFERS_OFF_WARNING )
604604 ereport (WARNING , (errcode (ERRCODE_WARNING ),
605- errmsg ("buffers statistics disabled" )));
605+ errmsg ("buffers statistics disabled" )));
606606
607607 oldcontext = MemoryContextSwitchTo (funcctx -> multi_call_memory_ctx );
608608
@@ -864,6 +864,7 @@ SendBgWorkerPids(void)
864864 int i ;
865865 shm_mq_handle * mqh ;
866866 LOCKTAG tag ;
867+ shm_mq_result result ;
867868
868869 LockShmem (& tag , PG_QS_SND_KEY );
869870
@@ -893,10 +894,15 @@ SendBgWorkerPids(void)
893894 }
894895
895896#if PG_VERSION_NUM < 150000
896- shm_mq_send (mqh , msg_len , msg , false);
897+ result = shm_mq_send (mqh , msg_len , msg , false);
897898#else
898- shm_mq_send (mqh , msg_len , msg , false, true);
899+ result = shm_mq_send (mqh , msg_len , msg , false, true);
899900#endif
901+
902+ /* Check for failure. */
903+ if (result == SHM_MQ_DETACHED )
904+ elog (WARNING , "could not send message queue to shared-memory queue: receiver has been detached" );
905+
900906 UnlockShmem (& tag );
901907}
902908
@@ -953,10 +959,10 @@ GetRemoteBackendWorkers(PGPROC *proc)
953959
954960signal_error :
955961 ereport (ERROR , (errcode (ERRCODE_INTERNAL_ERROR ),
956- errmsg ("invalid send signal" )));
962+ errmsg ("invalid send signal" )));
957963mq_error :
958964 ereport (ERROR , (errcode (ERRCODE_INTERNAL_ERROR ),
959- errmsg ("error in message queue data transmitting" )));
965+ errmsg ("error in message queue data transmitting" )));
960966
961967 return NIL ;
962968}
@@ -974,12 +980,12 @@ static shm_mq_result
974980receive_msg_by_parts (shm_mq_handle * mqh , Size * total , void * * datap ,
975981 int64 timeout , int * rc , bool nowait )
976982{
977- shm_mq_result mq_receive_result ;
978- shm_mq_msg * buff ;
979- int offset ;
980- Size * expected ;
981- Size expected_data ;
982- Size len ;
983+ shm_mq_result mq_receive_result ;
984+ shm_mq_msg * buff ;
985+ int offset ;
986+ Size * expected ;
987+ Size expected_data ;
988+ Size len ;
983989
984990 /* Get the expected number of bytes in message */
985991 mq_receive_result = shm_mq_receive (mqh , & len , (void * * ) & expected , nowait );
@@ -1107,7 +1113,7 @@ GetRemoteBackendQueryStates(PGPROC *leader,
11071113 mqh = shm_mq_attach (mq , NULL , NULL );
11081114 elog (DEBUG1 , "Wait response from leader %d" , leader -> pid );
11091115 mq_receive_result = receive_msg_by_parts (mqh , & len , (void * * ) & msg ,
1110- 0 , NULL , false);
1116+ 0 , NULL , false);
11111117 if (mq_receive_result != SHM_MQ_SUCCESS )
11121118 goto mq_error ;
11131119 if (msg -> reqid != reqid )
@@ -1126,7 +1132,7 @@ GetRemoteBackendQueryStates(PGPROC *leader,
11261132 */
11271133 foreach (iter , alive_procs )
11281134 {
1129- PGPROC * proc = (PGPROC * ) lfirst (iter );
1135+ PGPROC * proc = (PGPROC * ) lfirst (iter );
11301136
11311137 /* prepare message queue to transfer data */
11321138 elog (DEBUG1 , "Wait response from worker %d" , proc -> pid );
@@ -1166,15 +1172,15 @@ GetRemoteBackendQueryStates(PGPROC *leader,
11661172
11671173signal_error :
11681174 ereport (ERROR , (errcode (ERRCODE_INTERNAL_ERROR ),
1169- errmsg ("invalid send signal" )));
1175+ errmsg ("invalid send signal" )));
11701176mq_error :
11711177#if PG_VERSION_NUM < 100000
11721178 shm_mq_detach (mq );
11731179#else
11741180 shm_mq_detach (mqh );
11751181#endif
11761182 ereport (ERROR , (errcode (ERRCODE_INTERNAL_ERROR ),
1177- errmsg ("error in message queue data transmitting" )));
1183+ errmsg ("error in message queue data transmitting" )));
11781184
11791185 return NIL ;
11801186}
0 commit comments