Add lock for loading so.

This commit is contained in:
totaj
2023-02-15 19:34:53 +08:00
parent 52dd7bc750
commit 3dac2a636a
12 changed files with 102 additions and 29 deletions

View File

@ -483,6 +483,7 @@ extern Datum GetTypeZeroValue(Form_pg_attribute att_tup);
extern Tuple ReplaceTupleNullCol(TupleDesc tupleDesc, TupleTableSlot* slot);
extern Datum ExecEvalArrayRef(ArrayRefExprState* astate, ExprContext* econtext, bool* isNull, ExprDoneCond* isDone);
extern int ResourceOwnerForgetIfExistPthreadMutex(ResourceOwner owner, pthread_mutex_t* pMutex, bool trace);
// AutoMutexLock
// Auto object for non-recursive pthread_mutex_t lock
@ -491,7 +492,11 @@ class AutoMutexLock {
public:
AutoMutexLock(pthread_mutex_t* mutex, bool trace = true)
: m_mutex(mutex), m_fLocked(false), m_trace(trace), m_owner(t_thrd.utils_cxt.CurrentResourceOwner)
{}
{
if (mutex == &file_list_lock) {
m_owner = t_thrd.lsc_cxt.local_sysdb_resowner;
}
}
~AutoMutexLock()
{
@ -538,10 +543,11 @@ public:
if (m_fLocked) {
int ret = 0;
if (t_thrd.utils_cxt.CurrentResourceOwner == NULL)
m_owner = NULL;
ret = PthreadMutexUnlock(m_owner, m_mutex, m_trace);
if (m_mutex == &file_list_lock) {
ret = ResourceOwnerForgetIfExistPthreadMutex(m_owner, m_mutex, m_trace);
} else {
ret = PthreadMutexUnlock(m_owner, m_mutex, m_trace);
}
m_fLocked = (ret == 0 ? false : true);
if (m_fLocked) {
/* this should never happen, system may be completely in a mess */