diff options
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/Makefile | 4 | ||||
-rw-r--r-- | src/backend/storage/lmgr/.gitignore | 1 | ||||
-rw-r--r-- | src/backend/storage/lmgr/Makefile | 9 | ||||
-rw-r--r-- | src/backend/storage/lmgr/generate-lwlocknames.pl | 60 | ||||
-rw-r--r-- | src/backend/storage/lmgr/lwlock.c | 15 | ||||
-rw-r--r-- | src/backend/storage/lmgr/lwlocknames.txt | 60 | ||||
-rw-r--r-- | src/backend/storage/lmgr/meson.build | 2 | ||||
-rw-r--r-- | src/backend/utils/activity/wait_event_names.txt | 8 |
8 files changed, 44 insertions, 115 deletions
diff --git a/src/backend/Makefile b/src/backend/Makefile index 3d7be095291..6700aec0396 100644 --- a/src/backend/Makefile +++ b/src/backend/Makefile @@ -110,8 +110,8 @@ $(top_builddir)/src/port/libpgport_srv.a: | submake-libpgport parser/gram.h: parser/gram.y $(MAKE) -C parser gram.h -storage/lmgr/lwlocknames.h: storage/lmgr/generate-lwlocknames.pl storage/lmgr/lwlocknames.txt utils/activity/wait_event_names.txt - $(MAKE) -C storage/lmgr lwlocknames.h lwlocknames.c +storage/lmgr/lwlocknames.h: storage/lmgr/generate-lwlocknames.pl ../include/storage/lwlocklist.h utils/activity/wait_event_names.txt + $(MAKE) -C storage/lmgr lwlocknames.h utils/activity/wait_event_types.h: utils/activity/generate-wait_event_types.pl utils/activity/wait_event_names.txt $(MAKE) -C utils/activity wait_event_types.h pgstat_wait_event.c wait_event_funcs_data.c diff --git a/src/backend/storage/lmgr/.gitignore b/src/backend/storage/lmgr/.gitignore index dab4c3f5806..8e5b734f152 100644 --- a/src/backend/storage/lmgr/.gitignore +++ b/src/backend/storage/lmgr/.gitignore @@ -1,3 +1,2 @@ -/lwlocknames.c /lwlocknames.h /s_lock_test diff --git a/src/backend/storage/lmgr/Makefile b/src/backend/storage/lmgr/Makefile index 1aef423384c..3f89548bde6 100644 --- a/src/backend/storage/lmgr/Makefile +++ b/src/backend/storage/lmgr/Makefile @@ -18,7 +18,6 @@ OBJS = \ lmgr.o \ lock.o \ lwlock.o \ - lwlocknames.o \ predicate.o \ proc.o \ s_lock.o \ @@ -35,11 +34,7 @@ s_lock_test: s_lock.c $(top_builddir)/src/common/libpgcommon.a $(top_builddir)/s $(TASPATH) -L $(top_builddir)/src/common -lpgcommon \ -L $(top_builddir)/src/port -lpgport -lm -o s_lock_test -# see notes in src/backend/parser/Makefile -lwlocknames.c: lwlocknames.h - touch $@ - -lwlocknames.h: $(top_srcdir)/src/backend/storage/lmgr/lwlocknames.txt $(top_srcdir)/src/backend/utils/activity/wait_event_names.txt generate-lwlocknames.pl +lwlocknames.h: ../../../include/storage/lwlocklist.h ../../utils/activity/wait_event_names.txt generate-lwlocknames.pl $(PERL) $(srcdir)/generate-lwlocknames.pl $^ check: s_lock_test @@ -47,4 +42,4 @@ check: s_lock_test clean: rm -f s_lock_test - rm -f lwlocknames.h lwlocknames.c + rm -f lwlocknames.h diff --git a/src/backend/storage/lmgr/generate-lwlocknames.pl b/src/backend/storage/lmgr/generate-lwlocknames.pl index 7b93ecf6c1e..eaddd9d3b97 100644 --- a/src/backend/storage/lmgr/generate-lwlocknames.pl +++ b/src/backend/storage/lmgr/generate-lwlocknames.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl # -# Generate lwlocknames.h and lwlocknames.c from lwlocknames.txt +# Generate lwlocknames.h from lwlocklist.h # Copyright (c) 2000-2024, PostgreSQL Global Development Group use strict; @@ -14,26 +14,22 @@ my $continue = "\n"; GetOptions('outdir:s' => \$output_path); -open my $lwlocknames, '<', $ARGV[0] or die; +open my $lwlocklist, '<', $ARGV[0] or die; open my $wait_event_names, '<', $ARGV[1] or die; # Include PID in suffix in case parallel make runs this multiple times. my $htmp = "$output_path/lwlocknames.h.tmp$$"; -my $ctmp = "$output_path/lwlocknames.c.tmp$$"; open my $h, '>', $htmp or die "Could not open $htmp: $!"; -open my $c, '>', $ctmp or die "Could not open $ctmp: $!"; my $autogen = - "/* autogenerated from src/backend/storage/lmgr/lwlocknames.txt, do not edit */\n"; + "/* autogenerated from src/include/storage/lwlocklist.h, do not edit */\n"; print $h $autogen; print $h "/* there is deliberately not an #ifndef LWLOCKNAMES_H here */\n\n"; -print $c $autogen, "\n"; -print $c "const char *const IndividualLWLockNames[] = {"; # # First, record the predefined LWLocks listed in wait_event_names.txt. We'll -# cross-check those with the ones in lwlocknames.txt. +# cross-check those with the ones in lwlocklist.h. # my @wait_event_lwlocks; my $record_lwlocks = 0; @@ -61,66 +57,70 @@ while (<$wait_event_names>) # Record the LWLock. (my $waiteventname, my $waitevendocsentence) = split(/\t/, $_); - push(@wait_event_lwlocks, $waiteventname . "Lock"); + push(@wait_event_lwlocks, $waiteventname); } +my $in_comment = 0; my $i = 0; -while (<$lwlocknames>) +while (<$lwlocklist>) { chomp; - # Skip comments - next if /^#/; + # Skip single-line C comments and empty lines + next if m{^\s*/\*.*\*/$}; next if /^\s*$/; - die "unable to parse lwlocknames.txt" - unless /^(\w+)\s+(\d+)$/; + # skip multiline C comments + if ($in_comment == 1) + { + $in_comment = 0 if m{\*/}; + next; + } + elsif (m{^\s*/\*}) + { + $in_comment = 1; + next; + } - (my $lockname, my $lockidx) = ($1, $2); + die "unable to parse lwlocklist.h line \"$_\"" + unless /^PG_LWLOCK\((\d+),\s+(\w+)\)$/; - my $trimmedlockname = $lockname; - $trimmedlockname =~ s/Lock$//; - die "lock names must end with 'Lock'" if $trimmedlockname eq $lockname; + (my $lockidx, my $lockname) = ($1, $2); - die "lwlocknames.txt not in order" if $lockidx < $lastlockidx; - die "lwlocknames.txt has duplicates" if $lockidx == $lastlockidx; + die "lwlocklist.h not in order" if $lockidx < $lastlockidx; + die "lwlocklist.h has duplicates" if $lockidx == $lastlockidx; - die "$lockname defined in lwlocknames.txt but missing from " + die "$lockname defined in lwlocklist.h but missing from " . "wait_event_names.txt" if $i >= scalar @wait_event_lwlocks; die "lists of predefined LWLocks do not match (first mismatch at " . "$wait_event_lwlocks[$i] in wait_event_names.txt and $lockname in " - . "lwlocknames.txt)" + . "lwlocklist.h)" if $wait_event_lwlocks[$i] ne $lockname; $i++; while ($lastlockidx < $lockidx - 1) { ++$lastlockidx; - printf $c "%s \"<unassigned:%d>\"", $continue, $lastlockidx; $continue = ",\n"; } - printf $c "%s \"%s\"", $continue, $trimmedlockname; $lastlockidx = $lockidx; $continue = ",\n"; - print $h "#define $lockname (&MainLWLockArray[$lockidx].lock)\n"; + print $h "#define ${lockname}Lock (&MainLWLockArray[$lockidx].lock)\n"; } die "$wait_event_lwlocks[$i] defined in wait_event_names.txt but missing from " - . "lwlocknames.txt" + . "lwlocklist.h" if $i < scalar @wait_event_lwlocks; -printf $c "\n};\n"; print $h "\n"; printf $h "#define NUM_INDIVIDUAL_LWLOCKS %s\n", $lastlockidx + 1; close $h; -close $c; rename($htmp, "$output_path/lwlocknames.h") || die "rename: $htmp to $output_path/lwlocknames.h: $!"; -rename($ctmp, "$output_path/lwlocknames.c") || die "rename: $ctmp: $!"; -close $lwlocknames; +close $lwlocklist; diff --git a/src/backend/storage/lmgr/lwlock.c b/src/backend/storage/lmgr/lwlock.c index 30f3a09a4ce..83992725de3 100644 --- a/src/backend/storage/lmgr/lwlock.c +++ b/src/backend/storage/lmgr/lwlock.c @@ -112,8 +112,8 @@ StaticAssertDecl(LW_VAL_EXCLUSIVE > (uint32) MAX_BACKENDS, * There are three sorts of LWLock "tranches": * * 1. The individually-named locks defined in lwlocknames.h each have their - * own tranche. The names of these tranches appear in IndividualLWLockNames[] - * in lwlocknames.c. + * own tranche. We absorb the names of these tranches from there into + * BuiltinTrancheNames here. * * 2. There are some predefined tranches for built-in groups of locks. * These are listed in enum BuiltinTrancheIds in lwlock.h, and their names @@ -126,9 +126,10 @@ StaticAssertDecl(LW_VAL_EXCLUSIVE > (uint32) MAX_BACKENDS, * All these names are user-visible as wait event names, so choose with care * ... and do not forget to update the documentation's list of wait events. */ -extern const char *const IndividualLWLockNames[]; /* in lwlocknames.c */ - static const char *const BuiltinTrancheNames[] = { +#define PG_LWLOCK(id, lockname) [id] = CppAsString(lockname) "Lock", +#include "storage/lwlocklist.h" +#undef PG_LWLOCK [LWTRANCHE_XACT_BUFFER] = "XactBuffer", [LWTRANCHE_COMMITTS_BUFFER] = "CommitTsBuffer", [LWTRANCHE_SUBTRANS_BUFFER] = "SubtransBuffer", @@ -742,11 +743,7 @@ LWLockReportWaitEnd(void) static const char * GetLWTrancheName(uint16 trancheId) { - /* Individual LWLock? */ - if (trancheId < NUM_INDIVIDUAL_LWLOCKS) - return IndividualLWLockNames[trancheId]; - - /* Built-in tranche? */ + /* Built-in tranche or individual LWLock? */ if (trancheId < LWTRANCHE_FIRST_USER_DEFINED) return BuiltinTrancheNames[trancheId]; diff --git a/src/backend/storage/lmgr/lwlocknames.txt b/src/backend/storage/lmgr/lwlocknames.txt deleted file mode 100644 index 284d168f776..00000000000 --- a/src/backend/storage/lmgr/lwlocknames.txt +++ /dev/null @@ -1,60 +0,0 @@ -# Some commonly-used locks have predefined positions within MainLWLockArray; -# these are defined here. If you add a lock, add it to the end to avoid -# renumbering the existing locks; if you remove a lock, consider leaving a gap -# in the numbering sequence for the benefit of DTrace and other external -# debugging scripts. Also, do not forget to update the section -# WaitEventLWLock of src/backend/utils/activity/wait_event_names.txt. - -# 0 is available; was formerly BufFreelistLock -ShmemIndexLock 1 -OidGenLock 2 -XidGenLock 3 -ProcArrayLock 4 -SInvalReadLock 5 -SInvalWriteLock 6 -WALBufMappingLock 7 -WALWriteLock 8 -ControlFileLock 9 -# 10 was CheckpointLock -# 11 was XactSLRULock -# 12 was SubtransSLRULock -MultiXactGenLock 13 -# 14 was MultiXactOffsetSLRULock -# 15 was MultiXactMemberSLRULock -RelCacheInitLock 16 -CheckpointerCommLock 17 -TwoPhaseStateLock 18 -TablespaceCreateLock 19 -BtreeVacuumLock 20 -AddinShmemInitLock 21 -AutovacuumLock 22 -AutovacuumScheduleLock 23 -SyncScanLock 24 -RelationMappingLock 25 -#26 was NotifySLRULock -NotifyQueueLock 27 -SerializableXactHashLock 28 -SerializableFinishedListLock 29 -SerializablePredicateListLock 30 -# 31 was SerialSLRULock -SyncRepLock 32 -BackgroundWorkerLock 33 -DynamicSharedMemoryControlLock 34 -AutoFileLock 35 -ReplicationSlotAllocationLock 36 -ReplicationSlotControlLock 37 -#38 was CommitTsSLRULock -CommitTsLock 39 -ReplicationOriginLock 40 -MultiXactTruncationLock 41 -# 42 was OldSnapshotTimeMapLock -LogicalRepWorkerLock 43 -XactTruncationLock 44 -# 45 was XactTruncationLock until removal of BackendRandomLock -WrapLimitsVacuumLock 46 -NotifyQueueTailLock 47 -WaitEventExtensionLock 48 -WALSummarizerLock 49 -DSMRegistryLock 50 -InjectionPointLock 51 -SerialControlLock 52 diff --git a/src/backend/storage/lmgr/meson.build b/src/backend/storage/lmgr/meson.build index da32198f788..05ac41e809a 100644 --- a/src/backend/storage/lmgr/meson.build +++ b/src/backend/storage/lmgr/meson.build @@ -11,5 +11,3 @@ backend_sources += files( 's_lock.c', 'spin.c', ) - -generated_backend_sources += lwlocknames[1] diff --git a/src/backend/utils/activity/wait_event_names.txt b/src/backend/utils/activity/wait_event_names.txt index c08e00d1d6a..8d0571a03d1 100644 --- a/src/backend/utils/activity/wait_event_names.txt +++ b/src/backend/utils/activity/wait_event_names.txt @@ -280,9 +280,9 @@ Extension "Waiting in an extension." # This class of wait events has its own set of C structure, so these are # only used for the documentation. # -# NB: Predefined LWLocks (i.e., those declared in lwlocknames.txt) must be +# NB: Predefined LWLocks (i.e., those declared in lwlocklist.h) must be # listed in the top section of locks and must be listed in the same order as in -# lwlocknames.txt. +# lwlocklist.h. # Section: ClassName - WaitEventLWLock @@ -333,9 +333,9 @@ SerialControl "Waiting to read or update shared <filename>pg_serial</filename> s # # END OF PREDEFINED LWLOCKS (DO NOT CHANGE THIS LINE) # -# Predefined LWLocks (i.e., those declared in lwlocknames.txt) must be listed +# Predefined LWLocks (i.e., those declared in lwlocknames.h) must be listed # in the section above and must be listed in the same order as in -# lwlocknames.txt. Other LWLocks must be listed in the section below. +# lwlocknames.h. Other LWLocks must be listed in the section below. # XactBuffer "Waiting for I/O on a transaction status SLRU buffer." |