don't lock ThreadLocal predicates.

This commit is contained in:
Vítor Santos Costa 2011-03-15 09:08:09 +00:00
parent 656e95f068
commit 2a76f86785
5 changed files with 28 additions and 10 deletions

View File

@ -7898,6 +7898,7 @@ Yap_absmi(int inp)
PELOCK(10,ap);
PP = ap;
if (!ap->cs.p_code.NOfClauses) {
UNLOCKPE(11,ap);
FAIL();
}
/*

View File

@ -1010,6 +1010,7 @@ IPred(PredEntry *ap, UInt NSlots, yamop *next_pc)
ap->CodeOfPred = (yamop *)(&(ap->OpcodeOfPred));
#if defined(YAPOR) || defined(THREADS)
} else if (ap->PredFlags & LogUpdatePredFlag &&
!(ap->PredFlags & ThreadLocalPredFlag) &&
ap->ModuleOfPred != IDB_MODULE) {
ap->OpcodeOfPred = LOCKPRED_OPCODE;
ap->CodeOfPred = (yamop *)(&(ap->OpcodeOfPred));
@ -1060,6 +1061,7 @@ RemoveMainIndex(PredEntry *ap)
}
#if defined(YAPOR) || defined(THREADS)
if (ap->PredFlags & LogUpdatePredFlag &&
!(ap->PredFlags & ThreadLocalPredFlag) &&
ap->ModuleOfPred != IDB_MODULE) {
ap->OpcodeOfPred = LOCKPRED_OPCODE;
ap->CodeOfPred = (yamop *)(&(ap->OpcodeOfPred));
@ -1611,7 +1613,8 @@ retract_all(PredEntry *p, int in_use)
p->cs.p_code.TrueCodeOfPred = p->CodeOfPred = (yamop *)(&(p->OpcodeOfPred));
#if defined(YAPOR) || defined(THREADS)
if (p->PredFlags & LogUpdatePredFlag &&
p->ModuleOfPred != IDB_MODULE) {
!(p->PredFlags & ThreadLocalPredFlag) &&
p->ModuleOfPred != IDB_MODULE) {
p->OpcodeOfPred = LOCKPRED_OPCODE;
p->CodeOfPred = (yamop *)(&(p->OpcodeOfPred));
}
@ -1664,6 +1667,7 @@ add_first_static(PredEntry *p, yamop *cp, int spy_flag)
p->OpcodeOfPred = pt->opc;
#if defined(YAPOR) || defined(THREADS)
if (p->PredFlags & LogUpdatePredFlag &&
!(p->PredFlags & ThreadLocalPredFlag) &&
p->ModuleOfPred != IDB_MODULE) {
p->OpcodeOfPred = LOCKPRED_OPCODE;
p->CodeOfPred = (yamop *)(&(p->OpcodeOfPred));
@ -1759,7 +1763,8 @@ add_first_dynamic(PredEntry *p, yamop *cp, int spy_flag)
p->cs.p_code.NOfClauses = 1;
#if defined(YAPOR) || defined(THREADS)
if (p->PredFlags & LogUpdatePredFlag &&
p->ModuleOfPred != IDB_MODULE) {
!(p->PredFlags & ThreadLocalPredFlag) &&
p->ModuleOfPred != IDB_MODULE) {
p->OpcodeOfPred = LOCKPRED_OPCODE;
p->CodeOfPred = (yamop *)(&(p->OpcodeOfPred));
}
@ -1817,7 +1822,8 @@ asserta_stat_clause(PredEntry *p, yamop *q, int spy_flag)
p->CodeOfPred = (yamop *)(&(p->OpcodeOfPred));
}
#if defined(YAPOR) || defined(THREADS)
if (p->ModuleOfPred != IDB_MODULE) {
if (p->ModuleOfPred != IDB_MODULE &&
!(p->PredFlags & ThreadLocalPredFlag)) {
p->OpcodeOfPred = LOCKPRED_OPCODE;
p->CodeOfPred = (yamop *)(&(p->OpcodeOfPred));
}
@ -1891,7 +1897,8 @@ assertz_stat_clause(PredEntry *p, yamop *cp, int spy_flag)
p->cs.p_code.TrueCodeOfPred = p->CodeOfPred = (yamop *)(&(p->OpcodeOfPred));
}
#if defined(YAPOR) || defined(THREADS)
if (p->ModuleOfPred != IDB_MODULE) {
if (p->ModuleOfPred != IDB_MODULE &&
!(p->PredFlags & ThreadLocalPredFlag)) {
p->OpcodeOfPred = LOCKPRED_OPCODE;
p->CodeOfPred = (yamop *)(&(p->OpcodeOfPred));
}
@ -2231,6 +2238,7 @@ addclause(Term t, yamop *cp, int mode, Term mod, Term *t4ref)
}
#if defined(YAPOR) || defined(THREADS)
if (p->PredFlags & LogUpdatePredFlag &&
!(p->PredFlags & ThreadLocalPredFlag) &&
p->ModuleOfPred != IDB_MODULE) {
p->OpcodeOfPred = LOCKPRED_OPCODE;
p->CodeOfPred = (yamop *)(&(p->OpcodeOfPred));
@ -2255,7 +2263,8 @@ addclause(Term t, yamop *cp, int mode, Term mod, Term *t4ref)
}
#if defined(YAPOR) || defined(THREADS)
if (p->PredFlags & LogUpdatePredFlag &&
p->ModuleOfPred != IDB_MODULE) {
!(p->PredFlags & ThreadLocalPredFlag) &&
p->ModuleOfPred != IDB_MODULE) {
p->OpcodeOfPred = LOCKPRED_OPCODE;
p->CodeOfPred = (yamop *)(&(p->OpcodeOfPred));
}
@ -2388,7 +2397,8 @@ Yap_EraseStaticClause(StaticClause *cl, Term mod) {
}
#if defined(YAPOR) || defined(THREADS)
if (ap->PredFlags & LogUpdatePredFlag &&
ap->ModuleOfPred != IDB_MODULE) {
!(ap->PredFlags & ThreadLocalPredFlag) &&
ap->ModuleOfPred != IDB_MODULE) {
ap->OpcodeOfPred = LOCKPRED_OPCODE;
ap->CodeOfPred = (yamop *)(&(ap->OpcodeOfPred));
}
@ -2409,6 +2419,7 @@ Yap_add_logupd_clause(PredEntry *pe, LogUpdClause *cl, int mode) {
pe->OpcodeOfPred == FAIL_OPCODE) { /* log updates */
#if defined(YAPOR) || defined(THREADS)
if (pe->PredFlags & LogUpdatePredFlag &&
!(pe->PredFlags & ThreadLocalPredFlag) &&
pe->ModuleOfPred != IDB_MODULE) {
pe->OpcodeOfPred = LOCKPRED_OPCODE;
pe->CodeOfPred = (yamop *)(&(pe->OpcodeOfPred));
@ -2773,6 +2784,7 @@ p_rmspy( USES_REGS1 )
if (!(pred->PredFlags & DynamicPredFlag)) {
#if defined(YAPOR) || defined(THREADS)
if (pred->PredFlags & LogUpdatePredFlag &&
!(pred->PredFlags & ThreadLocalPredFlag) &&
pred->ModuleOfPred != IDB_MODULE) {
pred->OpcodeOfPred = LOCKPRED_OPCODE;
pred->CodeOfPred = (yamop *)(&(pred->OpcodeOfPred));

View File

@ -4268,7 +4268,8 @@ PrepareToEraseLogUpdClause(LogUpdClause *clau, DBRef dbr)
p->OpcodeOfPred = Yap_opcode(_spy_pred);
p->CodeOfPred = (yamop *)(&(p->OpcodeOfPred));
#if defined(YAPOR) || defined(THREADS)
} else if (p->ModuleOfPred != IDB_MODULE) {
} else if (p->ModuleOfPred != IDB_MODULE &&
!(p->PredFlags & ThreadLocalPredFlag)) {
p->OpcodeOfPred = LOCKPRED_OPCODE;
p->CodeOfPred = (yamop *)(&(p->OpcodeOfPred));
#endif
@ -4277,7 +4278,8 @@ PrepareToEraseLogUpdClause(LogUpdClause *clau, DBRef dbr)
p->OpcodeOfPred = p->cs.p_code.TrueCodeOfPred->opc;
}
#if defined(YAPOR) || defined(THREADS)
} else if (p->ModuleOfPred != IDB_MODULE) {
} else if (p->ModuleOfPred != IDB_MODULE &&
!(p->PredFlags & ThreadLocalPredFlag)) {
p->OpcodeOfPred = LOCKPRED_OPCODE;
p->CodeOfPred = (yamop *)(&(p->OpcodeOfPred));
#endif
@ -4290,7 +4292,8 @@ PrepareToEraseLogUpdClause(LogUpdClause *clau, DBRef dbr)
p->OpcodeOfPred = Yap_opcode(_spy_pred);
p->CodeOfPred = (yamop *)(&(p->OpcodeOfPred));
#if defined(YAPOR) || defined(THREADS)
} else if (p->ModuleOfPred != IDB_MODULE) {
} else if (p->ModuleOfPred != IDB_MODULE &&
!(p->PredFlags & ThreadLocalPredFlag)) {
p->OpcodeOfPred = LOCKPRED_OPCODE;
p->CodeOfPred = (yamop *)(&(p->OpcodeOfPred));
#endif

View File

@ -4524,6 +4524,7 @@ ExpandIndex(PredEntry *ap, int ExtraArgs, yamop *nextop USES_REGS) {
}
#if defined(YAPOR) || defined(THREADS)
if (ap->PredFlags & LogUpdatePredFlag &&
!(ap->PredFlags & ThreadLocalPredFlag) &&
ap->ModuleOfPred != IDB_MODULE) {
ap->OpcodeOfPred = LOCKPRED_OPCODE;
ap->cs.p_code.TrueCodeOfPred = ap->CodeOfPred = (yamop *)(&(ap->OpcodeOfPred));
@ -6127,6 +6128,7 @@ remove_from_index(PredEntry *ap, path_stack_entry *sp, ClauseDef *cls, yamop *bg
ap->CodeOfPred = (yamop *)(&(ap->OpcodeOfPred));
#if defined(YAPOR) || defined(THREADS)
} else if (ap->PredFlags & LogUpdatePredFlag &&
!(ap->PredFlags & ThreadLocalPredFlag) &&
ap->ModuleOfPred != IDB_MODULE) {
ap->cs.p_code.TrueCodeOfPred = FAILCODE;
ap->OpcodeOfPred = LOCKPRED_OPCODE;

@ -1 +1 @@
Subproject commit bb009d2e6627ec9eac06684b2c09069808e5e238
Subproject commit 9e637343dfb5b152c0d9d1f486bcadbf975f778c