@@ -618,6 +618,11 @@ pg_query_state(PG_FUNCTION_ARGS)
618618 shm_mq_msg * msg = (shm_mq_msg * ) lfirst (i );
619619 proc_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+
621626 qs_stack = deserialize_stack (msg -> stack , msg -> stack_depth );
622627
623628 p_state -> proc = msg -> proc ;
@@ -856,7 +861,12 @@ SendBgWorkerPids(void)
856861 msg -> number = list_length (all_workers );
857862 i = 0 ;
858863 foreach (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
861871 shm_mq_send (mqh , msg_len , msg , false);
862872}
@@ -894,9 +904,10 @@ GetRemoteBackendWorkers(PGPROC *proc)
894904
895905 for (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 ;
900911 result = lcons (proc , result );
901912 }
902913
@@ -971,7 +982,7 @@ GetRemoteBackendQueryStates(PGPROC *leader,
971982 foreach (iter , pworkers )
972983 {
973984 PGPROC * proc = (PGPROC * ) lfirst (iter );
974-
985+ Assert ( proc && proc -> pid );
975986 sig_result = SendProcSignal (proc -> pid ,
976987 QueryStatePollReason ,
977988 proc -> backendId );
0 commit comments