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

Commit74f6c16

Browse files
authored
Merge pull request#42 from sokolcati/PGPRO-6693
[PGPRO-6693] Checking the result of shm_mq_send (according to Svace).
2 parents410cf8f +484600c commit74f6c16

File tree

2 files changed

+33
-27
lines changed

2 files changed

+33
-27
lines changed

‎pg_query_state.c

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,10 @@ static List *GetRemoteBackendQueryStates(PGPROC *leader,
101101
ExplainFormatformat);
102102

103103
/* Shared memory variables */
104-
shm_toc*toc=NULL;
104+
shm_toc*toc=NULL;
105105
RemoteUserIdResult*counterpart_userid=NULL;
106-
pg_qs_params*params=NULL;
107-
shm_mq*mq=NULL;
106+
pg_qs_params*params=NULL;
107+
shm_mq*mq=NULL;
108108

109109
/*
110110
* Estimate amount of shared memory needed.
@@ -208,7 +208,7 @@ _PG_init(void)
208208
||UserIdPollReason==INVALID_PROCSIGNAL)
209209
{
210210
ereport(WARNING, (errcode(ERRCODE_INSUFFICIENT_RESOURCES),
211-
errmsg("pg_query_state isn't loaded: insufficient custom ProcSignal slots")));
211+
errmsg("pg_query_state isn't loaded: insufficient custom ProcSignal slots")));
212212
return;
213213
}
214214

@@ -435,7 +435,7 @@ deserialize_stack(char *src, int stack_depth)
435435
{
436436
List*result=NIL;
437437
char*curr_ptr=src;
438-
inti;
438+
inti;
439439

440440
for (i=0;i<stack_depth;i++)
441441
{
@@ -599,10 +599,10 @@ pg_query_state(PG_FUNCTION_ARGS)
599599
/* print warnings if exist */
600600
if (msg->warnings&TIMINIG_OFF_WARNING)
601601
ereport(WARNING, (errcode(ERRCODE_WARNING),
602-
errmsg("timing statistics disabled")));
602+
errmsg("timing statistics disabled")));
603603
if (msg->warnings&BUFFERS_OFF_WARNING)
604604
ereport(WARNING, (errcode(ERRCODE_WARNING),
605-
errmsg("buffers statistics disabled")));
605+
errmsg("buffers statistics disabled")));
606606

607607
oldcontext=MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
608608

@@ -864,6 +864,7 @@ SendBgWorkerPids(void)
864864
inti;
865865
shm_mq_handle*mqh;
866866
LOCKTAGtag;
867+
shm_mq_resultresult;
867868

868869
LockShmem(&tag,PG_QS_SND_KEY);
869870

@@ -893,10 +894,15 @@ SendBgWorkerPids(void)
893894
}
894895

895896
#ifPG_VERSION_NUM<150000
896-
shm_mq_send(mqh,msg_len,msg, false);
897+
result=shm_mq_send(mqh,msg_len,msg, false);
897898
#else
898-
shm_mq_send(mqh,msg_len,msg, false, true);
899+
result=shm_mq_send(mqh,msg_len,msg, false, true);
899900
#endif
901+
902+
/* Check for failure. */
903+
if(result==SHM_MQ_DETACHED)
904+
elog(WARNING,"could not send message queue to shared-memory queue: receiver has been detached");
905+
900906
UnlockShmem(&tag);
901907
}
902908

@@ -953,10 +959,10 @@ GetRemoteBackendWorkers(PGPROC *proc)
953959

954960
signal_error:
955961
ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR),
956-
errmsg("invalid send signal")));
962+
errmsg("invalid send signal")));
957963
mq_error:
958964
ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR),
959-
errmsg("error in message queue data transmitting")));
965+
errmsg("error in message queue data transmitting")));
960966

961967
returnNIL;
962968
}
@@ -974,12 +980,12 @@ static shm_mq_result
974980
receive_msg_by_parts(shm_mq_handle*mqh,Size*total,void**datap,
975981
int64timeout,int*rc,boolnowait)
976982
{
977-
shm_mq_resultmq_receive_result;
978-
shm_mq_msg*buff;
979-
intoffset;
980-
Size*expected;
981-
Sizeexpected_data;
982-
Sizelen;
983+
shm_mq_resultmq_receive_result;
984+
shm_mq_msg*buff;
985+
intoffset;
986+
Size*expected;
987+
Sizeexpected_data;
988+
Sizelen;
983989

984990
/* Get the expected number of bytes in message */
985991
mq_receive_result=shm_mq_receive(mqh,&len, (void**)&expected,nowait);
@@ -1107,7 +1113,7 @@ GetRemoteBackendQueryStates(PGPROC *leader,
11071113
mqh=shm_mq_attach(mq,NULL,NULL);
11081114
elog(DEBUG1,"Wait response from leader %d",leader->pid);
11091115
mq_receive_result=receive_msg_by_parts(mqh,&len, (void**)&msg,
1110-
0,NULL, false);
1116+
0,NULL, false);
11111117
if (mq_receive_result!=SHM_MQ_SUCCESS)
11121118
gotomq_error;
11131119
if (msg->reqid!=reqid)
@@ -1126,7 +1132,7 @@ GetRemoteBackendQueryStates(PGPROC *leader,
11261132
*/
11271133
foreach(iter,alive_procs)
11281134
{
1129-
PGPROC*proc= (PGPROC*)lfirst(iter);
1135+
PGPROC*proc= (PGPROC*)lfirst(iter);
11301136

11311137
/* prepare message queue to transfer data */
11321138
elog(DEBUG1,"Wait response from worker %d",proc->pid);
@@ -1166,15 +1172,15 @@ GetRemoteBackendQueryStates(PGPROC *leader,
11661172

11671173
signal_error:
11681174
ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR),
1169-
errmsg("invalid send signal")));
1175+
errmsg("invalid send signal")));
11701176
mq_error:
11711177
#ifPG_VERSION_NUM<100000
11721178
shm_mq_detach(mq);
11731179
#else
11741180
shm_mq_detach(mqh);
11751181
#endif
11761182
ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR),
1177-
errmsg("error in message queue data transmitting")));
1183+
errmsg("error in message queue data transmitting")));
11781184

11791185
returnNIL;
11801186
}

‎signal_handler.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -224,12 +224,12 @@ send_msg_by_parts(shm_mq_handle *mqh, Size nbytes, const void *data)
224224
void
225225
SendQueryState(void)
226226
{
227-
shm_mq_handle*mqh;
228-
instr_timestart_time;
229-
instr_timecur_time;
230-
int64delay=MAX_SND_TIMEOUT;
231-
intreqid=params->reqid;
232-
LOCKTAGtag;
227+
shm_mq_handle*mqh;
228+
instr_timestart_time;
229+
instr_timecur_time;
230+
int64delay=MAX_SND_TIMEOUT;
231+
intreqid=params->reqid;
232+
LOCKTAGtag;
233233

234234
INSTR_TIME_SET_CURRENT(start_time);
235235

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp