@@ -618,6 +618,11 @@ pg_query_state(PG_FUNCTION_ARGS)
618618shm_mq_msg * msg = (shm_mq_msg * )lfirst (i );
619619proc_state * p_state = (proc_state * )palloc (sizeof (proc_state ));
620620
621+ if (msg -> result_code != QS_RETURNED )
622+ continue ;
623+
624+ AssertState (msg -> result_code == QS_RETURNED );
625+
621626qs_stack = deserialize_stack (msg -> stack ,msg -> stack_depth );
622627
623628p_state -> proc = msg -> proc ;
@@ -856,7 +861,12 @@ SendBgWorkerPids(void)
856861msg -> number = list_length (all_workers );
857862i = 0 ;
858863foreach (iter ,all_workers )
859- msg -> pids [i ++ ]= lfirst_int (iter );
864+ {
865+ pid_t current_pid = lfirst_int (iter );
866+
867+ AssertState (current_pid > 0 );
868+ msg -> pids [i ++ ]= current_pid ;
869+ }
860870
861871shm_mq_send (mqh ,msg_len ,msg , false);
862872}
@@ -894,9 +904,10 @@ GetRemoteBackendWorkers(PGPROC *proc)
894904
895905for (i = 0 ;i < msg -> number ;i ++ )
896906{
897- pid_t pid = msg -> pids [i ];
898- PGPROC * proc = BackendPidGetProc (pid );
899-
907+ pid_t pid = msg -> pids [i ];
908+ PGPROC * proc = BackendPidGetProc (pid );
909+ if (!proc || !proc -> pid )
910+ continue ;
900911result = lcons (proc ,result );
901912}
902913
@@ -971,7 +982,8 @@ GetRemoteBackendQueryStates(PGPROC *leader,
971982foreach (iter ,pworkers )
972983{
973984PGPROC * proc = (PGPROC * )lfirst (iter );
974-
985+ if (!proc || !proc -> pid )
986+ continue ;
975987sig_result = SendProcSignal (proc -> pid ,
976988QueryStatePollReason ,
977989proc -> backendId );