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);
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: