Add lock for loading so.
This commit is contained in:
@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user