make sure that condor version always grows trail!

git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1137 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc 2004-09-14 03:30:06 +00:00
parent 7e9c32fd52
commit 70f9c1176d
2 changed files with 67 additions and 47 deletions

View File

@ -845,7 +845,9 @@ growatomtable(void)
UNLOCK(SignalLock); UNLOCK(SignalLock);
while ((ntb = (AtomHashEntry *)Yap_AllocCodeSpace(nsize*sizeof(AtomHashEntry))) == NULL) { while ((ntb = (AtomHashEntry *)Yap_AllocCodeSpace(nsize*sizeof(AtomHashEntry))) == NULL) {
/* leave for next time */ /* leave for next time */
#if !USE_SYSTEM_MALLOC
if (!do_growheap(FALSE, nsize*sizeof(AtomHashEntry), NULL)) if (!do_growheap(FALSE, nsize*sizeof(AtomHashEntry), NULL))
#endif
return FALSE; return FALSE;
} }
atom_table_overflows++; atom_table_overflows++;
@ -1184,6 +1186,9 @@ static int do_growtrail(long size)
UInt start_growth_time = Yap_cputime(), growth_time; UInt start_growth_time = Yap_cputime(), growth_time;
int gc_verbose = Yap_is_gc_verbose(); int gc_verbose = Yap_is_gc_verbose();
/* at least 64K for trail */
if (size < 64*1024)
size = 64*1024;
/* adjust to a multiple of 256) */ /* adjust to a multiple of 256) */
size = AdjustPageSize(size); size = AdjustPageSize(size);
trail_overflows++; trail_overflows++;

109
C/index.c
View File

@ -11,8 +11,11 @@
* File: index.c * * File: index.c *
* comments: Indexing a Prolog predicate * * comments: Indexing a Prolog predicate *
* * * *
* Last rev: $Date: 2004-09-03 03:11:09 $,$Author: vsc $ * * Last rev: $Date: 2004-09-14 03:30:06 $,$Author: vsc $ *
* $Log: not supported by cvs2svn $ * $Log: not supported by cvs2svn $
* Revision 1.97 2004/09/03 03:11:09 vsc
* memory management fixes
*
* Revision 1.96 2004/08/27 20:18:52 vsc * Revision 1.96 2004/08/27 20:18:52 vsc
* more small fixes * more small fixes
* *
@ -3730,8 +3733,13 @@ reset_stack(istack_entry *sp0)
} }
static istack_entry * static istack_entry *
push_stack(istack_entry *sp, Int arg, Term Tag, Term extra) push_stack(istack_entry *sp, Int arg, Term Tag, Term extra, struct intermediates *cint)
{ {
#if !OS_HANDLES_TR_OVERFLOW || USE_SYSTEM_MALLOC
if (sp+1 > (istack_entry *)Yap_TrailTop) {
longjmp(cint->CompilerBotch,4);
}
#endif
sp->pos = arg; sp->pos = arg;
sp->val = Tag; sp->val = Tag;
sp->extra = extra; sp->extra = extra;
@ -4216,16 +4224,16 @@ expand_index(struct intermediates *cint) {
labp = &(ipc->u.llll.l4); labp = &(ipc->u.llll.l4);
ipc = ipc->u.llll.l4; ipc = ipc->u.llll.l4;
} else if (IsPairTerm(t)) { } else if (IsPairTerm(t)) {
sp = push_stack(sp, 1, AbsPair(NULL), TermNil); sp = push_stack(sp, 1, AbsPair(NULL), TermNil, cint);
s_reg = RepPair(t); s_reg = RepPair(t);
olabp = NULL; olabp = NULL;
labp = &(ipc->u.llll.l1); labp = &(ipc->u.llll.l1);
ipc = ipc->u.llll.l1; ipc = ipc->u.llll.l1;
} else if (IsApplTerm(t)) { } else if (IsApplTerm(t)) {
sp = push_stack(sp, 1, AbsAppl((CELL *)FunctorOfTerm(t)), TermNil); sp = push_stack(sp, 1, AbsAppl((CELL *)FunctorOfTerm(t)), TermNil, cint);
ipc = ipc->u.llll.l3; ipc = ipc->u.llll.l3;
} else { } else {
sp = push_stack(sp, argno, t, TermNil); sp = push_stack(sp, argno, t, TermNil, cint);
ipc = ipc->u.llll.l2; ipc = ipc->u.llll.l2;
} }
break; break;
@ -4241,13 +4249,13 @@ expand_index(struct intermediates *cint) {
olabp = NULL; olabp = NULL;
s_reg = RepPair(t); s_reg = RepPair(t);
labp = &(ipc->u.ollll.l1); labp = &(ipc->u.ollll.l1);
sp = push_stack(sp, 1, AbsPair(NULL), TermNil); sp = push_stack(sp, 1, AbsPair(NULL), TermNil, cint);
ipc = ipc->u.ollll.l1; ipc = ipc->u.ollll.l1;
} else if (IsApplTerm(t)) { } else if (IsApplTerm(t)) {
sp = push_stack(sp, 1, AbsAppl((CELL *)FunctorOfTerm(t)), TermNil); sp = push_stack(sp, 1, AbsAppl((CELL *)FunctorOfTerm(t)), TermNil, cint);
ipc = ipc->u.ollll.l3; ipc = ipc->u.ollll.l3;
} else { } else {
sp = push_stack(sp, argno, t, TermNil); sp = push_stack(sp, argno, t, TermNil, cint);
ipc = ipc->u.ollll.l2; ipc = ipc->u.ollll.l2;
} }
break; break;
@ -4262,14 +4270,14 @@ expand_index(struct intermediates *cint) {
} else if (IsPairTerm(t)) { } else if (IsPairTerm(t)) {
s_reg = RepPair(t); s_reg = RepPair(t);
olabp = NULL; olabp = NULL;
sp = push_stack(sp, argno, AbsPair(NULL), TermNil); sp = push_stack(sp, argno, AbsPair(NULL), TermNil, cint);
labp = &(ipc->u.xllll.l1); labp = &(ipc->u.xllll.l1);
ipc = ipc->u.xllll.l1; ipc = ipc->u.xllll.l1;
} else if (IsApplTerm(t)) { } else if (IsApplTerm(t)) {
sp = push_stack(sp, argno, AbsAppl((CELL *)FunctorOfTerm(t)), TermNil); sp = push_stack(sp, argno, AbsAppl((CELL *)FunctorOfTerm(t)), TermNil, cint);
ipc = ipc->u.xllll.l3; ipc = ipc->u.xllll.l3;
} else { } else {
sp = push_stack(sp, argno, t, TermNil); sp = push_stack(sp, argno, t, TermNil, cint);
ipc = ipc->u.xllll.l2; ipc = ipc->u.xllll.l2;
} }
break; break;
@ -4285,20 +4293,20 @@ expand_index(struct intermediates *cint) {
i++; i++;
} else if (IsPairTerm(t)) { } else if (IsPairTerm(t)) {
s_reg = RepPair(t); s_reg = RepPair(t);
sp = push_stack(sp, -i-1, AbsPair(NULL), TermNil); sp = push_stack(sp, -i-1, AbsPair(NULL), TermNil, cint);
olabp = NULL; olabp = NULL;
labp = &(ipc->u.sllll.l1); labp = &(ipc->u.sllll.l1);
ipc = ipc->u.sllll.l1; ipc = ipc->u.sllll.l1;
i = 0; i = 0;
} else if (IsApplTerm(t)) { } else if (IsApplTerm(t)) {
sp = push_stack(sp, -i-1, AbsAppl((CELL *)FunctorOfTerm(t)), TermNil); sp = push_stack(sp, -i-1, AbsAppl((CELL *)FunctorOfTerm(t)), TermNil, cint);
ipc = ipc->u.sllll.l3; ipc = ipc->u.sllll.l3;
i = 0; i = 0;
} else { } else {
/* We don't push stack here, instead we go over to next argument /* We don't push stack here, instead we go over to next argument
sp = push_stack(sp, -i-1, t); sp = push_stack(sp, -i-1, t, cint);
*/ */
sp = push_stack(sp, -i-1, t, TermNil); sp = push_stack(sp, -i-1, t, TermNil, cint);
ipc = ipc->u.sllll.l2; ipc = ipc->u.sllll.l2;
i++; i++;
} }
@ -4689,8 +4697,13 @@ 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, struct intermediates *cint)
{ {
#if !OS_HANDLES_TR_OVERFLOW || USE_SYSTEM_MALLOC
if (sp+1 > (path_stack_entry *)Yap_TrailTop) {
longjmp(cint->CompilerBotch,4);
}
#endif
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;
@ -5843,11 +5856,11 @@ add_to_index(struct intermediates *cint, int first, path_stack_entry *sp, Clause
ipc = ipc->u.l.l; ipc = ipc->u.l.l;
break; break;
case _jump_if_var: case _jump_if_var:
sp = push_path(sp, &(ipc->u.l.l), cls); sp = push_path(sp, &(ipc->u.l.l), cls, cint);
ipc = NEXTOP(ipc,l); ipc = NEXTOP(ipc,l);
break; break;
case _jump_if_nonvar: case _jump_if_nonvar:
sp = push_path(sp, &(ipc->u.xl.l), cls); sp = push_path(sp, &(ipc->u.xl.l), cls, cint);
ipc = NEXTOP(ipc,xl); ipc = NEXTOP(ipc,xl);
break; break;
/* instructions type EC */ /* instructions type EC */
@ -5862,7 +5875,7 @@ add_to_index(struct intermediates *cint, int first, path_stack_entry *sp, Clause
break; break;
/* instructions type e */ /* instructions type e */
case _switch_on_type: case _switch_on_type:
sp = push_path(sp, &(ipc->u.llll.l4), cls); sp = push_path(sp, &(ipc->u.llll.l4), cls, cint);
if (ap->PredFlags & LogUpdatePredFlag) { if (ap->PredFlags & LogUpdatePredFlag) {
add_head_info(cls, 1); add_head_info(cls, 1);
} else { } else {
@ -5912,7 +5925,7 @@ add_to_index(struct intermediates *cint, int first, path_stack_entry *sp, Clause
} }
break; break;
case _switch_list_nl: case _switch_list_nl:
sp = push_path(sp, &(ipc->u.ollll.l4), cls); sp = push_path(sp, &(ipc->u.ollll.l4), cls, cint);
if (ap->PredFlags & LogUpdatePredFlag) { if (ap->PredFlags & LogUpdatePredFlag) {
add_head_info(cls, 1); add_head_info(cls, 1);
} else { } else {
@ -5962,7 +5975,7 @@ add_to_index(struct intermediates *cint, int first, path_stack_entry *sp, Clause
} }
break; break;
case _switch_on_arg_type: case _switch_on_arg_type:
sp = push_path(sp, &(ipc->u.xllll.l4), cls); sp = push_path(sp, &(ipc->u.xllll.l4), cls, cint);
if (ap->PredFlags & LogUpdatePredFlag) { if (ap->PredFlags & LogUpdatePredFlag) {
add_head_info(cls, Yap_regtoregno(ipc->u.xllll.x)); add_head_info(cls, Yap_regtoregno(ipc->u.xllll.x));
} else { } else {
@ -6013,7 +6026,7 @@ add_to_index(struct intermediates *cint, int first, path_stack_entry *sp, Clause
} }
break; break;
case _switch_on_sub_arg_type: case _switch_on_sub_arg_type:
sp = push_path(sp, &(ipc->u.sllll.l4), cls); sp = push_path(sp, &(ipc->u.sllll.l4), cls, cint);
add_arg_info(cls, ap, ipc->u.sllll.s+1); add_arg_info(cls, ap, ipc->u.sllll.s+1);
if (IsPairTerm(cls->Tag)) { if (IsPairTerm(cls->Tag)) {
yamop *nipc = ipc->u.sllll.l1; yamop *nipc = ipc->u.sllll.l1;
@ -6275,7 +6288,7 @@ Yap_AddClauseToIndex(PredEntry *ap, yamop *beg, int first) {
#endif #endif
stack = (path_stack_entry *)TR; stack = (path_stack_entry *)TR;
cl.Code = cl.CurrentCode = beg; cl.Code = cl.CurrentCode = beg;
sp = push_path(stack, NULL, &cl); sp = push_path(stack, NULL, &cl, &cint);
add_to_index(&cint, first, sp, &cl); add_to_index(&cint, first, sp, &cl);
} }
@ -6309,7 +6322,7 @@ contract_ctable(yamop *ipc, ClauseUnion *blk, PredEntry *ap, Term at) {
} }
static void static void
remove_from_index(PredEntry *ap, path_stack_entry *sp, ClauseDef *cls, yamop *bg, yamop *lt) { remove_from_index(PredEntry *ap, path_stack_entry *sp, ClauseDef *cls, yamop *bg, yamop *lt, struct intermediates *cint) {
/* last clause to experiment with */ /* last clause to experiment with */
yamop *ipc = ap->cs.p_code.TrueCodeOfPred; yamop *ipc = ap->cs.p_code.TrueCodeOfPred;
UInt current_arity = 0; UInt current_arity = 0;
@ -6389,7 +6402,7 @@ remove_from_index(PredEntry *ap, path_stack_entry *sp, ClauseDef *cls, yamop *bg
case _retry_me2: case _retry_me2:
case _retry_me3: case _retry_me3:
case _retry_me4: case _retry_me4:
sp = push_path(sp, &(ipc->u.ld.d), cls); sp = push_path(sp, &(ipc->u.ld.d), cls, cint);
ipc = NEXTOP(ipc,ld); ipc = NEXTOP(ipc,ld);
break; break;
case _profiled_trust_me: case _profiled_trust_me:
@ -6407,16 +6420,16 @@ remove_from_index(PredEntry *ap, path_stack_entry *sp, ClauseDef *cls, yamop *bg
ipc = ipc->u.l.l; ipc = ipc->u.l.l;
break; break;
case _jump_if_var: case _jump_if_var:
sp = push_path(sp, &(ipc->u.l.l), cls); sp = push_path(sp, &(ipc->u.l.l), cls, cint);
ipc = NEXTOP(ipc,l); ipc = NEXTOP(ipc,l);
break; break;
case _jump_if_nonvar: case _jump_if_nonvar:
sp = push_path(sp, &(ipc->u.xl.l), cls); sp = push_path(sp, &(ipc->u.xl.l), cls, cint);
ipc = NEXTOP(ipc,xl); ipc = NEXTOP(ipc,xl);
break; break;
/* instructions type e */ /* instructions type e */
case _switch_on_type: case _switch_on_type:
sp = push_path(sp, &(ipc->u.llll.l4), cls); sp = push_path(sp, &(ipc->u.llll.l4), cls, cint);
if (ap->PredFlags & LogUpdatePredFlag) { if (ap->PredFlags & LogUpdatePredFlag) {
add_head_info(cls, 1); add_head_info(cls, 1);
} else { } else {
@ -6463,7 +6476,7 @@ remove_from_index(PredEntry *ap, path_stack_entry *sp, ClauseDef *cls, yamop *bg
} }
break; break;
case _switch_list_nl: case _switch_list_nl:
sp = push_path(sp, &(ipc->u.ollll.l4), cls); sp = push_path(sp, &(ipc->u.ollll.l4), cls, cint);
if (ap->PredFlags & LogUpdatePredFlag) { if (ap->PredFlags & LogUpdatePredFlag) {
add_head_info(cls, 1); add_head_info(cls, 1);
} else { } else {
@ -6510,7 +6523,7 @@ remove_from_index(PredEntry *ap, path_stack_entry *sp, ClauseDef *cls, yamop *bg
} }
break; break;
case _switch_on_arg_type: case _switch_on_arg_type:
sp = push_path(sp, &(ipc->u.xllll.l4), cls); sp = push_path(sp, &(ipc->u.xllll.l4), cls, cint);
current_arity = 2; current_arity = 2;
if (ap->PredFlags & LogUpdatePredFlag) { if (ap->PredFlags & LogUpdatePredFlag) {
add_head_info(cls, Yap_regtoregno(ipc->u.xllll.x)); add_head_info(cls, Yap_regtoregno(ipc->u.xllll.x));
@ -6557,7 +6570,7 @@ remove_from_index(PredEntry *ap, path_stack_entry *sp, ClauseDef *cls, yamop *bg
} }
break; break;
case _switch_on_sub_arg_type: case _switch_on_sub_arg_type:
sp = push_path(sp, &(ipc->u.sllll.l4), cls); sp = push_path(sp, &(ipc->u.sllll.l4), cls, cint);
current_arity = 2; current_arity = 2;
add_arg_info(cls, ap, ipc->u.sllll.s+1); add_arg_info(cls, ap, ipc->u.sllll.s+1);
if (IsPairTerm(cls->Tag)) { if (IsPairTerm(cls->Tag)) {
@ -6797,13 +6810,13 @@ Yap_RemoveClauseFromIndex(PredEntry *ap, yamop *beg) {
cl.Code = cl.CurrentCode = beg; cl.Code = cl.CurrentCode = beg;
last = (yamop *)((CODEADDR)c+c->ClSize); last = (yamop *)((CODEADDR)c+c->ClSize);
} }
sp = push_path(stack, NULL, &cl); sp = push_path(stack, NULL, &cl, &cint);
if (ap->cs.p_code.NOfClauses == 0) { if (ap->cs.p_code.NOfClauses == 0) {
/* there was no indexing code */ /* there was no indexing code */
ap->CodeOfPred = ap->cs.p_code.TrueCodeOfPred = FAILCODE; ap->CodeOfPred = ap->cs.p_code.TrueCodeOfPred = FAILCODE;
ap->OpcodeOfPred = Yap_opcode(_op_fail); ap->OpcodeOfPred = Yap_opcode(_op_fail);
} else { } else {
remove_from_index(ap, sp, &cl, beg, last); remove_from_index(ap, sp, &cl, beg, last, &cint);
} }
} }
@ -7467,7 +7480,7 @@ Yap_NthClause(PredEntry *ap, Int ncls)
} }
static yamop ** static yamop **
find_caller(PredEntry *ap, yamop *code) { find_caller(PredEntry *ap, yamop *code, struct intermediates *cint) {
/* first clause */ /* first clause */
yamop *alt = NULL; yamop *alt = NULL;
istack_entry *stack, *sp; istack_entry *stack, *sp;
@ -7552,16 +7565,16 @@ find_caller(PredEntry *ap, yamop *code) {
if (ipc->u.llll.l4 == code) return &(ipc->u.llll.l4); if (ipc->u.llll.l4 == code) return &(ipc->u.llll.l4);
ipc = ipc->u.llll.l4; ipc = ipc->u.llll.l4;
} else if (IsPairTerm(t)) { } else if (IsPairTerm(t)) {
sp = push_stack(sp, 1, AbsPair(NULL), TermNil); sp = push_stack(sp, 1, AbsPair(NULL), TermNil, cint);
s_reg = RepPair(t); s_reg = RepPair(t);
labp = &(ipc->u.llll.l1); labp = &(ipc->u.llll.l1);
if (ipc->u.llll.l1 == code) return &(ipc->u.llll.l1); if (ipc->u.llll.l1 == code) return &(ipc->u.llll.l1);
ipc = ipc->u.llll.l1; ipc = ipc->u.llll.l1;
} else if (IsApplTerm(t)) { } else if (IsApplTerm(t)) {
sp = push_stack(sp, 1, AbsAppl((CELL *)FunctorOfTerm(t)), TermNil); sp = push_stack(sp, 1, AbsAppl((CELL *)FunctorOfTerm(t)), TermNil, cint);
ipc = ipc->u.llll.l3; ipc = ipc->u.llll.l3;
} else { } else {
sp = push_stack(sp, 1, t, TermNil); sp = push_stack(sp, 1, t, TermNil, cint);
ipc = ipc->u.llll.l2; ipc = ipc->u.llll.l2;
} }
break; break;
@ -7574,15 +7587,15 @@ find_caller(PredEntry *ap, yamop *code) {
ipc = ipc->u.ollll.l4; ipc = ipc->u.ollll.l4;
} else if (IsPairTerm(t)) { } else if (IsPairTerm(t)) {
s_reg = RepPair(t); s_reg = RepPair(t);
sp = push_stack(sp, 1, AbsPair(NULL), TermNil); sp = push_stack(sp, 1, AbsPair(NULL), TermNil, cint);
if (ipc->u.ollll.l1 == code) if (ipc->u.ollll.l1 == code)
return &(ipc->u.ollll.l1); return &(ipc->u.ollll.l1);
ipc = ipc->u.ollll.l1; ipc = ipc->u.ollll.l1;
} else if (IsApplTerm(t)) { } else if (IsApplTerm(t)) {
sp = push_stack(sp, 1, AbsAppl((CELL *)FunctorOfTerm(t)), TermNil); sp = push_stack(sp, 1, AbsAppl((CELL *)FunctorOfTerm(t)), TermNil, cint);
ipc = ipc->u.ollll.l3; ipc = ipc->u.ollll.l3;
} else { } else {
sp = push_stack(sp, 1, t, TermNil); sp = push_stack(sp, 1, t, TermNil, cint);
ipc = ipc->u.ollll.l2; ipc = ipc->u.ollll.l2;
} }
break; break;
@ -7594,14 +7607,14 @@ find_caller(PredEntry *ap, yamop *code) {
ipc = ipc->u.xllll.l4; ipc = ipc->u.xllll.l4;
} else if (IsPairTerm(t)) { } else if (IsPairTerm(t)) {
s_reg = RepPair(t); s_reg = RepPair(t);
sp = push_stack(sp, argno, AbsPair(NULL), TermNil); sp = push_stack(sp, argno, AbsPair(NULL), TermNil, cint);
if (ipc->u.xllll.l1 == code) return &(ipc->u.xllll.l1); if (ipc->u.xllll.l1 == code) return &(ipc->u.xllll.l1);
ipc = ipc->u.xllll.l1; ipc = ipc->u.xllll.l1;
} else if (IsApplTerm(t)) { } else if (IsApplTerm(t)) {
sp = push_stack(sp, argno, AbsAppl((CELL *)FunctorOfTerm(t)), TermNil); sp = push_stack(sp, argno, AbsAppl((CELL *)FunctorOfTerm(t)), TermNil, cint);
ipc = ipc->u.xllll.l3; ipc = ipc->u.xllll.l3;
} else { } else {
sp = push_stack(sp, argno, t, TermNil); sp = push_stack(sp, argno, t, TermNil, cint);
ipc = ipc->u.xllll.l2; ipc = ipc->u.xllll.l2;
} }
break; break;
@ -7617,14 +7630,14 @@ find_caller(PredEntry *ap, yamop *code) {
ipc = ipc->u.sllll.l4; ipc = ipc->u.sllll.l4;
} else if (IsPairTerm(t)) { } else if (IsPairTerm(t)) {
s_reg = RepPair(t); s_reg = RepPair(t);
sp = push_stack(sp, -argno-1, AbsPair(NULL), TermNil); sp = push_stack(sp, -argno-1, AbsPair(NULL), TermNil, cint);
if (ipc->u.sllll.l1 == code) return &(ipc->u.sllll.l1); if (ipc->u.sllll.l1 == code) return &(ipc->u.sllll.l1);
ipc = ipc->u.sllll.l1; ipc = ipc->u.sllll.l1;
} else if (IsApplTerm(t)) { } else if (IsApplTerm(t)) {
sp = push_stack(sp, -argno-1, AbsAppl((CELL *)FunctorOfTerm(t)), TermNil); sp = push_stack(sp, -argno-1, AbsAppl((CELL *)FunctorOfTerm(t)), TermNil, cint);
ipc = ipc->u.sllll.l3; ipc = ipc->u.sllll.l3;
} else { } else {
sp = push_stack(sp, -argno-1, t, TermNil); sp = push_stack(sp, -argno-1, t, TermNil, cint);
ipc = ipc->u.sllll.l2; ipc = ipc->u.sllll.l2;
} }
} }
@ -7738,7 +7751,9 @@ Yap_CleanUpIndex(LogUpdIndex *blk)
) { ) {
/* I have to kill this block */ /* I have to kill this block */
yamop **caller, *new; yamop **caller, *new;
caller = find_caller(ap, blk->ClCode); struct intermediates cintb;
caller = find_caller(ap, blk->ClCode, &cintb);
while (TRUE) { while (TRUE) {
new = replace_lu_block(blk, REFRESH, ap, NULL, FALSE); new = replace_lu_block(blk, REFRESH, ap, NULL, FALSE);
/* will be null, if we are in the middle of the current block */ /* will be null, if we are in the middle of the current block */