Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit184a446

Browse files
author
Maksim Milyutin
committed
Make fixes to prevent race condition under transfering query state from leader process
1 parent28a7c9f commit184a446

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

‎contrib/pg_query_state/pg_query_state.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -854,12 +854,12 @@ GetRemoteBackendWorkers(PGPROC *proc)
854854

855855
sig_result=SendProcSignal(proc->pid,WorkerPollReason,proc->backendId);
856856
if (sig_result==-1)
857-
returnNIL;
857+
gotosignal_error;
858858

859859
mqh=shm_mq_attach(mq,NULL,NULL);
860860
mq_receive_result=shm_mq_receive(mqh,&msg_len, (void**)&msg, false);
861861
if (mq_receive_result!=SHM_MQ_SUCCESS)
862-
returnNIL;
862+
gotomq_error;
863863

864864
for (i=0;i<msg->number;i++)
865865
{
@@ -872,6 +872,13 @@ GetRemoteBackendWorkers(PGPROC *proc)
872872
shm_mq_detach(mq);
873873

874874
returnresult;
875+
876+
signal_error:
877+
ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR),
878+
errmsg("invalid send signal")));
879+
mq_error:
880+
ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR),
881+
errmsg("error in message queue data transmitting")));
875882
}
876883

877884
staticshm_mq_msg*
@@ -914,6 +921,9 @@ GetRemoteBackendQueryStates(PGPROC *leader,
914921
params->format=format;
915922
pg_write_barrier();
916923

924+
/* initialize message queue that will transfer query states */
925+
mq=shm_mq_create(mq,QUEUE_SIZE);
926+
917927
/*
918928
* send signal `QueryStatePollReason` to all processes and define all alive
919929
* ones
@@ -941,7 +951,6 @@ GetRemoteBackendQueryStates(PGPROC *leader,
941951
}
942952

943953
/* extract query state from leader process */
944-
mq=shm_mq_create(mq,QUEUE_SIZE);
945954
shm_mq_set_sender(mq,leader);
946955
shm_mq_set_receiver(mq,MyProc);
947956
mqh=shm_mq_attach(mq,NULL,NULL);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp