From a94a4e6a085bd94ac81fad6ca255cbf428329dde Mon Sep 17 00:00:00 2001 From: Rahila Syed Date: Fri, 21 Nov 2025 14:49:38 +0530 Subject: [PATCH] Segmentation fault reproducer --- .../test_dsm_registry/test_dsm_registry.c | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/test/modules/test_dsm_registry/test_dsm_registry.c b/src/test/modules/test_dsm_registry/test_dsm_registry.c index 4cc2ccdac3f..618a3be1341 100644 --- a/src/test/modules/test_dsm_registry/test_dsm_registry.c +++ b/src/test/modules/test_dsm_registry/test_dsm_registry.c @@ -13,12 +13,16 @@ #include "postgres.h" #include "fmgr.h" +#include "miscadmin.h" +#include "postmaster/bgworker.h" #include "storage/dsm_registry.h" #include "storage/lwlock.h" #include "utils/builtins.h" PG_MODULE_MAGIC; +PGDLLEXPORT pg_noreturn void TestDSMRegistryMain(Datum main_arg); + typedef struct TestDSMRegistryStruct { int val; @@ -144,3 +148,43 @@ get_val_in_hash(PG_FUNCTION_ARGS) PG_RETURN_TEXT_P(val); } + +void +_PG_init(void) +{ + BackgroundWorker bgw; + + if (!process_shared_preload_libraries_in_progress) + return; + + memset(&bgw, 0, sizeof(bgw)); + bgw.bgw_flags = BGWORKER_SHMEM_ACCESS | + BGWORKER_BACKEND_DATABASE_CONNECTION; + bgw.bgw_start_time = BgWorkerStart_RecoveryFinished; + snprintf(bgw.bgw_library_name, MAXPGPATH, "test_dsm_registry"); + snprintf(bgw.bgw_function_name, BGW_MAXLEN, "TestDSMRegistryMain"); + snprintf(bgw.bgw_name, BGW_MAXLEN, + "DSM background worker"); + snprintf(bgw.bgw_type, BGW_MAXLEN, + "DSM background worker"); + bgw.bgw_restart_time = 5; + bgw.bgw_notify_pid = 0; + bgw.bgw_main_arg = (Datum) 0; + + RegisterBackgroundWorker(&bgw); +} + +void +TestDSMRegistryMain(Datum main_arg) +{ + TestDSMRegistryHashEntry *entry; + char *key = "test"; + bool found; + + tdr_attach_shmem(); + + entry = dshash_find_or_insert(tdr_hash, key, &found); + elog(FATAL, "triggered fatal error during dshash lock"); + + dshash_release_lock(tdr_hash, entry); +} -- 2.34.1