more fixes for multi-threading.
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1008 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
1f6fafc6a0
commit
02ec294d84
22
C/absmi.c
22
C/absmi.c
@ -6365,16 +6365,20 @@ Yap_absmi(int inp)
|
|||||||
ASP = (CELL *) B;
|
ASP = (CELL *) B;
|
||||||
}
|
}
|
||||||
#if defined(YAPOR) || defined(THREADS)
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
LOCK(pe->PELock);
|
|
||||||
if (*PREG_ADDR != PREG) {
|
|
||||||
PREG = *PREG_ADDR;
|
|
||||||
UNLOCK(pe->PELock);
|
|
||||||
JMPNext();
|
|
||||||
}
|
|
||||||
if (PP == NULL) {
|
if (PP == NULL) {
|
||||||
READ_LOCK(pe->PRWLock);
|
READ_LOCK(pe->PRWLock);
|
||||||
PP = pe;
|
PP = pe;
|
||||||
}
|
}
|
||||||
|
LOCK(pe->PELock);
|
||||||
|
if (*PREG_ADDR != PREG) {
|
||||||
|
PREG = *PREG_ADDR;
|
||||||
|
if (pe->PredFlags & (ThreadLocalPredFlag|LogUpdatePredFlag)) {
|
||||||
|
READ_UNLOCK(pe->PRWLock);
|
||||||
|
PP = NULL;
|
||||||
|
}
|
||||||
|
UNLOCK(pe->PELock);
|
||||||
|
JMPNext();
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
saveregs();
|
saveregs();
|
||||||
pt0 = Yap_ExpandIndex(pe);
|
pt0 = Yap_ExpandIndex(pe);
|
||||||
@ -6382,6 +6386,12 @@ Yap_absmi(int inp)
|
|||||||
setregs();
|
setregs();
|
||||||
UNLOCK(pe->PELock);
|
UNLOCK(pe->PELock);
|
||||||
PREG = pt0;
|
PREG = pt0;
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
if (pe->PredFlags & (ThreadLocalPredFlag|LogUpdatePredFlag)) {
|
||||||
|
READ_UNLOCK(pe->PRWLock);
|
||||||
|
PP = NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
JMPNext();
|
JMPNext();
|
||||||
}
|
}
|
||||||
ENDBOp();
|
ENDBOp();
|
||||||
|
@ -4278,9 +4278,6 @@ Yap_ExpandIndex(PredEntry *ap) {
|
|||||||
static path_stack_entry *
|
static path_stack_entry *
|
||||||
push_path(path_stack_entry *sp, yamop **pipc, ClauseDef *clp)
|
push_path(path_stack_entry *sp, yamop **pipc, ClauseDef *clp)
|
||||||
{
|
{
|
||||||
if (Yap_Option['i' - 'a' + 1]) {
|
|
||||||
printf("+ %p=>%p\n",sp,sp+1);
|
|
||||||
}
|
|
||||||
sp->flag = pc_entry;
|
sp->flag = pc_entry;
|
||||||
sp->u.pce.pi_pc = pipc;
|
sp->u.pce.pi_pc = pipc;
|
||||||
sp->u.pce.code = clp->Code;
|
sp->u.pce.code = clp->Code;
|
||||||
|
Reference in New Issue
Block a user