fix memory overflow
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1203 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
f70af77e0c
commit
db9a865263
@ -11,8 +11,13 @@
|
|||||||
* File: amasm.c *
|
* File: amasm.c *
|
||||||
* comments: abstract machine assembler *
|
* comments: abstract machine assembler *
|
||||||
* *
|
* *
|
||||||
* Last rev: $Date: 2004-12-05 05:01:23 $ *
|
* Last rev: $Date: 2004-12-07 16:54:57 $ *
|
||||||
* $Log: not supported by cvs2svn $
|
* $Log: not supported by cvs2svn $
|
||||||
|
* Revision 1.67 2004/12/05 05:01:23 vsc
|
||||||
|
* try to reduce overheads when running with goal expansion enabled.
|
||||||
|
* CLPBN fixes
|
||||||
|
* Handle overflows when allocating big clauses properly.
|
||||||
|
*
|
||||||
* Revision 1.66 2004/11/19 22:08:41 vsc
|
* Revision 1.66 2004/11/19 22:08:41 vsc
|
||||||
* replace SYSTEM_ERROR by out OUT_OF_WHATEVER_ERROR whenever appropriate.
|
* replace SYSTEM_ERROR by out OUT_OF_WHATEVER_ERROR whenever appropriate.
|
||||||
*
|
*
|
||||||
@ -2971,7 +2976,6 @@ fetch_clause_space(Term* tp, UInt size, struct intermediates *cip)
|
|||||||
case OUT_OF_AUXSPACE_ERROR:
|
case OUT_OF_AUXSPACE_ERROR:
|
||||||
ARG1 = *tp;
|
ARG1 = *tp;
|
||||||
if (!Yap_ExpandPreAllocCodeSpace(Yap_Error_Size, (void *)cip)) {
|
if (!Yap_ExpandPreAllocCodeSpace(Yap_Error_Size, (void *)cip)) {
|
||||||
H = (CELL *)H[-1];
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
Yap_Error_TYPE = YAP_NO_ERROR;
|
Yap_Error_TYPE = YAP_NO_ERROR;
|
||||||
@ -2981,7 +2985,6 @@ fetch_clause_space(Term* tp, UInt size, struct intermediates *cip)
|
|||||||
/* don't just return NULL */
|
/* don't just return NULL */
|
||||||
ARG1 = *tp;
|
ARG1 = *tp;
|
||||||
if (!Yap_growheap(TRUE, size, cip)) {
|
if (!Yap_growheap(TRUE, size, cip)) {
|
||||||
H = (CELL *)H[-1];
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
Yap_Error_TYPE = YAP_NO_ERROR;
|
Yap_Error_TYPE = YAP_NO_ERROR;
|
||||||
|
@ -1449,6 +1449,7 @@ CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size, struc
|
|||||||
return CreateDBRefForAtom(Tm, p, InFlag, dbg);
|
return CreateDBRefForAtom(Tm, p, InFlag, dbg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* next, let's process a compound term */
|
||||||
{
|
{
|
||||||
DBTerm *ppt, *ppt0;
|
DBTerm *ppt, *ppt0;
|
||||||
DBRef pp, pp0;
|
DBRef pp, pp0;
|
||||||
@ -1459,7 +1460,6 @@ CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size, struc
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
dbg->tofref = TmpRefBase;
|
dbg->tofref = TmpRefBase;
|
||||||
/* compound term */
|
|
||||||
|
|
||||||
if (p == NULL) {
|
if (p == NULL) {
|
||||||
ADDR ptr = Yap_PreAllocCodeSpace();
|
ADDR ptr = Yap_PreAllocCodeSpace();
|
||||||
@ -1469,6 +1469,12 @@ CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size, struc
|
|||||||
pp0 = (DBRef)Yap_PreAllocCodeSpace();
|
pp0 = (DBRef)Yap_PreAllocCodeSpace();
|
||||||
ppt0 = &(pp0->DBT);
|
ppt0 = &(pp0->DBT);
|
||||||
}
|
}
|
||||||
|
if ((ADDR)ppt0 >= (ADDR)AuxSp-1024) {
|
||||||
|
Yap_Error_Size = (UInt)(extra_size+sizeof(ppt0));
|
||||||
|
Yap_Error_TYPE = OUT_OF_AUXSPACE_ERROR;
|
||||||
|
Yap_ReleasePreAllocCodeSpace((ADDR)pp0);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
ntp0 = ppt0->Contents;
|
ntp0 = ppt0->Contents;
|
||||||
#ifdef IDB_LINK_TABLE
|
#ifdef IDB_LINK_TABLE
|
||||||
dbg->lr = dbg->LinkAr = (link_entry *)TR;
|
dbg->lr = dbg->LinkAr = (link_entry *)TR;
|
||||||
|
Reference in New Issue
Block a user