@@ -618,6 +618,11 @@ pg_query_state(PG_FUNCTION_ARGS)
618
618
shm_mq_msg * msg = (shm_mq_msg * ) lfirst (i );
619
619
proc_state * p_state = (proc_state * ) palloc (sizeof (proc_state ));
620
620
621
+ if (msg -> result_code != QS_RETURNED )
622
+ continue ;
623
+
624
+ AssertState (msg -> result_code == QS_RETURNED );
625
+
621
626
qs_stack = deserialize_stack (msg -> stack , msg -> stack_depth );
622
627
623
628
p_state -> proc = msg -> proc ;
@@ -856,7 +861,12 @@ SendBgWorkerPids(void)
856
861
msg -> number = list_length (all_workers );
857
862
i = 0 ;
858
863
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
+ }
860
870
861
871
shm_mq_send (mqh , msg_len , msg , false);
862
872
}
@@ -894,9 +904,10 @@ GetRemoteBackendWorkers(PGPROC *proc)
894
904
895
905
for (i = 0 ; i < msg -> number ; i ++ )
896
906
{
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 ;
900
911
result = lcons (proc , result );
901
912
}
902
913
@@ -971,7 +982,8 @@ GetRemoteBackendQueryStates(PGPROC *leader,
971
982
foreach (iter , pworkers )
972
983
{
973
984
PGPROC * proc = (PGPROC * ) lfirst (iter );
974
-
985
+ if (!proc || !proc -> pid )
986
+ continue ;
975
987
sig_result = SendProcSignal (proc -> pid ,
976
988
QueryStatePollReason ,
977
989
proc -> backendId );
0 commit comments