Skip to content

Commit 659e534

Browse files
committedMay 1, 2019
Fix union for pgstat message types
The message type for temp files and for checksum failures were missing from the union. Due to the coding style used there was no compiler error when this happend. So change the code to actively use the union thereby producing a compiler error if the same mistake happens again, suggested by Tom Lane. Author: Julien Rouhaud Reported-By: Tomas Vondra Discussion: https://postgr.es/m/20190430163328.zd4rrlnbvgaqlcdz@development
1 parent 809c9b4 commit 659e534

File tree

2 files changed

+25
-20
lines changed

2 files changed

+25
-20
lines changed
 

‎src/backend/postmaster/pgstat.c

+22-19
Original file line numberDiff line numberDiff line change
@@ -4477,80 +4477,83 @@ PgstatCollectorMain(int argc, char *argv[])
44774477
break;
44784478

44794479
case PGSTAT_MTYPE_INQUIRY:
4480-
pgstat_recv_inquiry((PgStat_MsgInquiry *) &msg, len);
4480+
pgstat_recv_inquiry(&msg.msg_inquiry, len);
44814481
break;
44824482

44834483
case PGSTAT_MTYPE_TABSTAT:
4484-
pgstat_recv_tabstat((PgStat_MsgTabstat *) &msg, len);
4484+
pgstat_recv_tabstat(&msg.msg_tabstat, len);
44854485
break;
44864486

44874487
case PGSTAT_MTYPE_TABPURGE:
4488-
pgstat_recv_tabpurge((PgStat_MsgTabpurge *) &msg, len);
4488+
pgstat_recv_tabpurge(&msg.msg_tabpurge, len);
44894489
break;
44904490

44914491
case PGSTAT_MTYPE_DROPDB:
4492-
pgstat_recv_dropdb((PgStat_MsgDropdb *) &msg, len);
4492+
pgstat_recv_dropdb(&msg.msg_dropdb, len);
44934493
break;
44944494

44954495
case PGSTAT_MTYPE_RESETCOUNTER:
4496-
pgstat_recv_resetcounter((PgStat_MsgResetcounter *) &msg,
4497-
len);
4496+
pgstat_recv_resetcounter(&msg.msg_resetcounter, len);
44984497
break;
44994498

45004499
case PGSTAT_MTYPE_RESETSHAREDCOUNTER:
45014500
pgstat_recv_resetsharedcounter(
4502-
(PgStat_MsgResetsharedcounter *) &msg,
4501+
&msg.msg_resetsharedcounter,
45034502
len);
45044503
break;
45054504

45064505
case PGSTAT_MTYPE_RESETSINGLECOUNTER:
45074506
pgstat_recv_resetsinglecounter(
4508-
(PgStat_MsgResetsinglecounter *) &msg,
4507+
&msg.msg_resetsinglecounter,
45094508
len);
45104509
break;
45114510

45124511
case PGSTAT_MTYPE_AUTOVAC_START:
4513-
pgstat_recv_autovac((PgStat_MsgAutovacStart *) &msg, len);
4512+
pgstat_recv_autovac(&msg.msg_autovacuum_start, len);
45144513
break;
45154514

45164515
case PGSTAT_MTYPE_VACUUM:
4517-
pgstat_recv_vacuum((PgStat_MsgVacuum *) &msg, len);
4516+
pgstat_recv_vacuum(&msg.msg_vacuum, len);
45184517
break;
45194518

45204519
case PGSTAT_MTYPE_ANALYZE:
4521-
pgstat_recv_analyze((PgStat_MsgAnalyze *) &msg, len);
4520+
pgstat_recv_analyze(&msg.msg_analyze, len);
45224521
break;
45234522

45244523
case PGSTAT_MTYPE_ARCHIVER:
4525-
pgstat_recv_archiver((PgStat_MsgArchiver *) &msg, len);
4524+
pgstat_recv_archiver(&msg.msg_archiver, len);
45264525
break;
45274526

45284527
case PGSTAT_MTYPE_BGWRITER:
4529-
pgstat_recv_bgwriter((PgStat_MsgBgWriter *) &msg, len);
4528+
pgstat_recv_bgwriter(&msg.msg_bgwriter, len);
45304529
break;
45314530

45324531
case PGSTAT_MTYPE_FUNCSTAT:
4533-
pgstat_recv_funcstat((PgStat_MsgFuncstat *) &msg, len);
4532+
pgstat_recv_funcstat(&msg.msg_funcstat, len);
45344533
break;
45354534

45364535
case PGSTAT_MTYPE_FUNCPURGE:
4537-
pgstat_recv_funcpurge((PgStat_MsgFuncpurge *) &msg, len);
4536+
pgstat_recv_funcpurge(&msg.msg_funcpurge, len);
45384537
break;
45394538

45404539
case PGSTAT_MTYPE_RECOVERYCONFLICT:
4541-
pgstat_recv_recoveryconflict((PgStat_MsgRecoveryConflict *) &msg, len);
4540+
pgstat_recv_recoveryconflict(
4541+
&msg.msg_recoveryconflict,
4542+
len);
45424543
break;
45434544

45444545
case PGSTAT_MTYPE_DEADLOCK:
4545-
pgstat_recv_deadlock((PgStat_MsgDeadlock *) &msg, len);
4546+
pgstat_recv_deadlock(&msg.msg_deadlock, len);
45464547
break;
45474548

45484549
case PGSTAT_MTYPE_TEMPFILE:
4549-
pgstat_recv_tempfile((PgStat_MsgTempFile *) &msg, len);
4550+
pgstat_recv_tempfile(&msg.msg_tempfile, len);
45504551
break;
45514552

45524553
case PGSTAT_MTYPE_CHECKSUMFAILURE:
4553-
pgstat_recv_checksum_failure((PgStat_MsgChecksumFailure *) &msg, len);
4554+
pgstat_recv_checksum_failure(
4555+
&msg.msg_checksumfailure,
4556+
len);
45544557
break;
45554558

45564559
default:

‎src/include/pgstat.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,7 @@ typedef union PgStat_Msg
560560
PgStat_MsgResetcounter msg_resetcounter;
561561
PgStat_MsgResetsharedcounter msg_resetsharedcounter;
562562
PgStat_MsgResetsinglecounter msg_resetsinglecounter;
563-
PgStat_MsgAutovacStart msg_autovacuum;
563+
PgStat_MsgAutovacStart msg_autovacuum_start;
564564
PgStat_MsgVacuum msg_vacuum;
565565
PgStat_MsgAnalyze msg_analyze;
566566
PgStat_MsgArchiver msg_archiver;
@@ -569,6 +569,8 @@ typedef union PgStat_Msg
569569
PgStat_MsgFuncpurge msg_funcpurge;
570570
PgStat_MsgRecoveryConflict msg_recoveryconflict;
571571
PgStat_MsgDeadlock msg_deadlock;
572+
PgStat_MsgTempFile msg_tempfile;
573+
PgStat_MsgChecksumFailure msg_checksumfailure;
572574
} PgStat_Msg;
573575

574576

0 commit comments

Comments
 (0)
Please sign in to comment.