@@ -101,10 +101,10 @@ static List *GetRemoteBackendQueryStates(PGPROC *leader,
101101ExplainFormat 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{
210210ereport (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" )));
212212return ;
213213}
214214
@@ -435,7 +435,7 @@ deserialize_stack(char *src, int stack_depth)
435435{
436436List * result = NIL ;
437437char * curr_ptr = src ;
438- int i ;
438+ int i ;
439439
440440for (i = 0 ;i < stack_depth ;i ++ )
441441{
@@ -599,10 +599,10 @@ pg_query_state(PG_FUNCTION_ARGS)
599599/* print warnings if exist */
600600if (msg -> warnings & TIMINIG_OFF_WARNING )
601601ereport (WARNING , (errcode (ERRCODE_WARNING ),
602- errmsg ("timing statistics disabled" )));
602+ errmsg ("timing statistics disabled" )));
603603if (msg -> warnings & BUFFERS_OFF_WARNING )
604604ereport (WARNING , (errcode (ERRCODE_WARNING ),
605- errmsg ("buffers statistics disabled" )));
605+ errmsg ("buffers statistics disabled" )));
606606
607607oldcontext = MemoryContextSwitchTo (funcctx -> multi_call_memory_ctx );
608608
@@ -864,6 +864,7 @@ SendBgWorkerPids(void)
864864int i ;
865865shm_mq_handle * mqh ;
866866LOCKTAG tag ;
867+ shm_mq_result result ;
867868
868869LockShmem (& 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+
900906UnlockShmem (& tag );
901907}
902908
@@ -953,10 +959,10 @@ GetRemoteBackendWorkers(PGPROC *proc)
953959
954960signal_error :
955961ereport (ERROR , (errcode (ERRCODE_INTERNAL_ERROR ),
956- errmsg ("invalid send signal" )));
962+ errmsg ("invalid send signal" )));
957963mq_error :
958964ereport (ERROR , (errcode (ERRCODE_INTERNAL_ERROR ),
959- errmsg ("error in message queue data transmitting" )));
965+ errmsg ("error in message queue data transmitting" )));
960966
961967return NIL ;
962968}
@@ -974,12 +980,12 @@ static shm_mq_result
974980receive_msg_by_parts (shm_mq_handle * mqh ,Size * total ,void * * datap ,
975981int64 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 */
985991mq_receive_result = shm_mq_receive (mqh ,& len , (void * * )& expected ,nowait );
@@ -1107,7 +1113,7 @@ GetRemoteBackendQueryStates(PGPROC *leader,
11071113mqh = shm_mq_attach (mq ,NULL ,NULL );
11081114elog (DEBUG1 ,"Wait response from leader %d" ,leader -> pid );
11091115mq_receive_result = receive_msg_by_parts (mqh ,& len , (void * * )& msg ,
1110- 0 ,NULL , false);
1116+ 0 ,NULL , false);
11111117if (mq_receive_result != SHM_MQ_SUCCESS )
11121118gotomq_error ;
11131119if (msg -> reqid != reqid )
@@ -1126,7 +1132,7 @@ GetRemoteBackendQueryStates(PGPROC *leader,
11261132 */
11271133foreach (iter ,alive_procs )
11281134{
1129- PGPROC * proc = (PGPROC * )lfirst (iter );
1135+ PGPROC * proc = (PGPROC * )lfirst (iter );
11301136
11311137/* prepare message queue to transfer data */
11321138elog (DEBUG1 ,"Wait response from worker %d" ,proc -> pid );
@@ -1166,15 +1172,15 @@ GetRemoteBackendQueryStates(PGPROC *leader,
11661172
11671173signal_error :
11681174ereport (ERROR , (errcode (ERRCODE_INTERNAL_ERROR ),
1169- errmsg ("invalid send signal" )));
1175+ errmsg ("invalid send signal" )));
11701176mq_error :
11711177#if PG_VERSION_NUM < 100000
11721178shm_mq_detach (mq );
11731179#else
11741180shm_mq_detach (mqh );
11751181#endif
11761182ereport (ERROR , (errcode (ERRCODE_INTERNAL_ERROR ),
1177- errmsg ("error in message queue data transmitting" )));
1183+ errmsg ("error in message queue data transmitting" )));
11781184
11791185return NIL ;
11801186}