From f8dc32128630a9341f1ee86a585c1e2e8fc6dfb6 Mon Sep 17 00:00:00 2001 From: Levi Neely Date: Mon, 9 Mar 2026 20:42:49 +0100 Subject: [PATCH] Fix debug psql_trylock: missing strong override left lockctr unupdated The weak psql_trylock() stub in psql.c called plocks_trywrlock() directly without updating lockctr. In the debug build, psql_unlock() asserts lockctr > 0, so when trylock succeeded (lock acquired, lockctr still 0) the assert fired with SIGABRT on write ops via pfs_inc_writeid_locked. Add a strong psql_trylock() override in psql_debug.c that delegates to psql_do_trylock(), which properly acquires the rwlock and updates lockctr. Co-Authored-By: Claude Sonnet 4.6 --- pclsync/debug/psql_debug.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pclsync/debug/psql_debug.c b/pclsync/debug/psql_debug.c index b17cdcd..2abfd35 100644 --- a/pclsync/debug/psql_debug.c +++ b/pclsync/debug/psql_debug.c @@ -227,6 +227,10 @@ void psql_do_rdlock(const char *file, unsigned line) { // Strong overrides for same-named functions (weak in psql.c) // -------------------------------------------------------------------------- +int psql_trylock() { + return psql_do_trylock(__FILE__, __LINE__); +} + void psql_lock() { psql_do_lock(__FILE__, __LINE__); }