From 333446e0feb14efef2730f8d2fba06fa4d4ef099 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Mon, 16 Jun 2025 18:08:16 -0700 Subject: [PATCH] dbDbLink: debug detect dbPutLink w/o locking Cross-check ownership when lockset debug tracking is enabled. --- modules/database/src/ioc/db/dbDbLink.c | 11 +++++++++++ modules/database/src/ioc/db/dbLockPvt.h | 1 + 2 files changed, 12 insertions(+) diff --git a/modules/database/src/ioc/db/dbDbLink.c b/modules/database/src/ioc/db/dbDbLink.c index 16cc33279..496221089 100644 --- a/modules/database/src/ioc/db/dbDbLink.c +++ b/modules/database/src/ioc/db/dbDbLink.c @@ -443,6 +443,17 @@ static long processTarget(dbCommon *psrc, dbCommon *pdst) epicsUInt8 pact = psrc->pact; epicsThreadId self = epicsThreadGetIdSelf(); +#ifdef LOCKSET_DEBUG + { + lockSet *ls = dbLockGetRef(psrc->lset); + assert(ls->owner == self); + dbLockDecRef(ls); + ls = dbLockGetRef(pdst->lset); + assert(ls->owner == self); + dbLockDecRef(ls); + } +#endif + psrc->pact = TRUE; if (psrc->ppn) diff --git a/modules/database/src/ioc/db/dbLockPvt.h b/modules/database/src/ioc/db/dbLockPvt.h index 99ab590df..03ed0bde4 100644 --- a/modules/database/src/ioc/db/dbLockPvt.h +++ b/modules/database/src/ioc/db/dbLockPvt.h @@ -12,6 +12,7 @@ #include "dbLock.h" #include "epicsMutex.h" #include "epicsSpin.h" +#include "epicsThread.h" /* Define to enable additional error checking */ #undef LOCKSET_DEBUG