diff --git a/C/adtdefs.c b/C/adtdefs.c index 0f9a35665..8871a3338 100644 --- a/C/adtdefs.c +++ b/C/adtdefs.c @@ -795,6 +795,7 @@ Yap_PredPropByFunctorNonThreadLocal(Functor f, Term cur_mod) return Yap_NewPredPropByFunctor(f,cur_mod); if ((p->ModuleOfPred == cur_mod || !(p->ModuleOfPred))) { + WRITE_UNLOCK(f->FRWLock); return AbsPredProp(p); } if (p->NextOfPE) { @@ -807,6 +808,7 @@ Yap_PredPropByFunctorNonThreadLocal(Functor f, Term cur_mod) p->ModuleOfPred == cur_mod) { READ_UNLOCK(PredHashRWLock); + WRITE_UNLOCK(f->FRWLock); return AbsPredProp(p); } p = RepPredProp(p->NextOfPE); diff --git a/H/Yatom.h b/H/Yatom.h index ea30f0e88..6071d58d8 100644 --- a/H/Yatom.h +++ b/H/Yatom.h @@ -1346,6 +1346,7 @@ GetPredPropByFuncHavingLock (FunctorEntry *fe, Term cur_mod) #if THREADS /* Thread Local Predicates */ if (p->PredFlags & ThreadLocalPredFlag) { + READ_UNLOCK(PredHashRWLock); return AbsPredProp (Yap_GetThreadPred (p)); } #endif