postgresql/src/include/storage
Tom Lane cbfbb14bd7 Avoid deadlock during orphan temp table removal.
If temp tables have dependencies (such as sequences) then it's
possible for autovacuum's cleanup of orphan temp tables to deadlock
against an incoming backend that's trying to clean out the temp
namespace for its own use.  That can happen because RemoveTempRelations'
performDeletion call can visit objects within the namespace in
an order different from the order in which a per-table deletion
will visit them.

To fix, observe that performDeletion will begin by taking an exclusive
lock on the temp namespace (even though it won't actually delete it).
So, if we can get a shared lock on the namespace, we can be sure we're
not running concurrently with RemoveTempRelations, while also not
conflicting with ordinary use of the namespace.  This requires
introducing a conditional version of LockDatabaseObject, but that's no
big deal.  (It's surprising we've got along without that this long.)

Report and patch by Mikhail Zhilin.  Back-patch to all supported
branches.

Discussion: https://postgr.es/m/c43ce028-2bc2-4865-9b89-3f706246eed5@postgrespro.ru
2024-04-02 14:59:04 -04:00
..
.gitignore When trace_lwlocks is used, identify individual lwlocks by name. 2015-09-11 14:01:39 -04:00
backendid.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
barrier.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
block.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
buf.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
buf_internals.h Ensure we use the correct spelling of "ensure" 2023-11-10 00:16:41 +13:00
buffile.h Add BufFileRead variants with short read and EOF detection 2023-01-16 11:01:31 +01:00
bufmgr.h ExtendBufferedWhat -> BufferManagerRelation. 2023-08-23 12:33:24 +12:00
bufpage.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
checksum.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
checksum_impl.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
condition_variable.h De-pessimize ConditionVariableCancelSleep(). 2023-08-15 10:33:55 +12:00
copydir.h Constify the arguments of copydir.h functions 2023-01-18 08:55:26 +09:00
dsm.h Avoid type cheats for invalid dsa_handles and dshash_table_handles. 2023-01-25 11:48:38 -05:00
dsm_impl.h Avoid type cheats for invalid dsa_handles and dshash_table_handles. 2023-01-25 11:48:38 -05:00
fd.h Add io_direct setting (developer-only). 2023-04-08 16:35:07 +12:00
fileset.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
freespace.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
fsm_internals.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
indexfsm.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
ipc.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
item.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
itemid.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
itemptr.h Consolidate ItemPointer to Datum conversion functions 2023-02-13 09:57:15 +01:00
large_object.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
latch.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
lmgr.h Avoid deadlock during orphan temp table removal. 2024-04-02 14:59:04 -04:00
lock.h Pre-beta mechanical code beautification. 2023-05-19 17:24:48 -04:00
lockdefs.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
lwlock.h Pre-beta mechanical code beautification. 2023-05-19 17:24:48 -04:00
md.h Add smgrzeroextend(), FileZero(), FileFallocate() 2023-04-05 10:06:39 -07:00
meson.build Update copyright for 2023 2023-01-02 15:00:37 -05:00
off.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
pg_sema.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
pg_shmem.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
pmsignal.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
predicate.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
predicate_internals.h Pre-beta mechanical code beautification. 2023-05-19 17:24:48 -04:00
proc.h Pre-beta mechanical code beautification. 2023-05-19 17:24:48 -04:00
procarray.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
proclist.h Constify proclist.h 2023-01-19 09:45:34 +01:00
proclist_types.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
procsignal.h Handle logical slot conflicts on standby 2023-04-08 00:05:44 -07:00
reinit.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
relfilelocator.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
s_lock.h Fix some typos and some incorrectly duplicated words 2023-04-18 14:03:49 +12:00
sharedfileset.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
shm_mq.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
shm_toc.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
shmem.h Remove SHM_QUEUE 2023-01-19 18:55:51 -08:00
sinval.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
sinvaladt.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
smgr.h Remove bogus #include added by d4e71df6d7. 2023-04-26 10:43:53 +12:00
spin.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
standby.h Remove vacuum_defer_cleanup_age 2023-04-24 12:21:02 -07:00
standbydefs.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
sync.h Update copyright for 2023 2023-01-02 15:00:37 -05:00