diff --git a/pg_query_state.c b/pg_query_state.c index 72a9b64..9bd6771 100644 --- a/pg_query_state.c +++ b/pg_query_state.c @@ -618,6 +618,11 @@ pg_query_state(PG_FUNCTION_ARGS) shm_mq_msg *msg = (shm_mq_msg *) lfirst(i); proc_state *p_state = (proc_state *) palloc(sizeof(proc_state)); + if (msg->result_code != QS_RETURNED) + continue; + + AssertState(msg->result_code == QS_RETURNED); + qs_stack = deserialize_stack(msg->stack, msg->stack_depth); p_state->proc = msg->proc; @@ -856,7 +861,12 @@ SendBgWorkerPids(void) msg->number = list_length(all_workers); i = 0; foreach(iter, all_workers) - msg->pids[i++] = lfirst_int(iter); + { + pid_t current_pid = lfirst_int(iter); + + AssertState(current_pid > 0); + msg->pids[i++] = current_pid; + } shm_mq_send(mqh, msg_len, msg, false); } @@ -894,9 +904,10 @@ GetRemoteBackendWorkers(PGPROC *proc) for (i = 0; i < msg->number; i++) { - pid_t pid = msg->pids[i]; - PGPROC *proc = BackendPidGetProc(pid); - + pid_t pid = msg->pids[i]; + PGPROC *proc = BackendPidGetProc(pid); + if (!proc || !proc->pid) + continue; result = lcons(proc, result); } @@ -971,7 +982,8 @@ GetRemoteBackendQueryStates(PGPROC *leader, foreach(iter, pworkers) { PGPROC *proc = (PGPROC *) lfirst(iter); - + if (!proc || !proc->pid) + continue; sig_result = SendProcSignal(proc->pid, QueryStatePollReason, proc->backendId);