From 2a76f8678521b4780b5584180299196f434fbe67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Tue, 15 Mar 2011 09:08:09 +0000 Subject: [PATCH] don't lock ThreadLocal predicates. --- C/absmi.c | 1 + C/cdmgr.c | 24 ++++++++++++++++++------ C/dbase.c | 9 ++++++--- C/index.c | 2 ++ packages/http | 2 +- 5 files changed, 28 insertions(+), 10 deletions(-) diff --git a/C/absmi.c b/C/absmi.c index 669d197d0..7cff8fffb 100755 --- a/C/absmi.c +++ b/C/absmi.c @@ -7898,6 +7898,7 @@ Yap_absmi(int inp) PELOCK(10,ap); PP = ap; if (!ap->cs.p_code.NOfClauses) { + UNLOCKPE(11,ap); FAIL(); } /* diff --git a/C/cdmgr.c b/C/cdmgr.c index b125b3fd7..29b217624 100644 --- a/C/cdmgr.c +++ b/C/cdmgr.c @@ -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)); diff --git a/C/dbase.c b/C/dbase.c index 3edf6dda6..26ba7a3e8 100755 --- a/C/dbase.c +++ b/C/dbase.c @@ -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 diff --git a/C/index.c b/C/index.c index 5f888b691..ad45f6e57 100644 --- a/C/index.c +++ b/C/index.c @@ -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; diff --git a/packages/http b/packages/http index bb009d2e6..9e637343d 160000 --- a/packages/http +++ b/packages/http @@ -1 +1 @@ -Subproject commit bb009d2e6627ec9eac06684b2c09069808e5e238 +Subproject commit 9e637343dfb5b152c0d9d1f486bcadbf975f778c