richter 00/12/05 12:15:29
Modified: . Tag: Embperl2c epcomp.c epdom.c
Log:
Embperl 2 - fixed memory leak
Revision Changes Path
No revision
No revision
1.4.2.21 +21 -4 embperl/Attic/epcomp.c
Index: epcomp.c
===================================================================
RCS file: /home/cvs/embperl/Attic/epcomp.c,v
retrieving revision 1.4.2.20
retrieving revision 1.4.2.21
diff -u -r1.4.2.20 -r1.4.2.21
--- epcomp.c 2000/12/05 07:21:53 1.4.2.20
+++ epcomp.c 2000/12/05 20:15:24 1.4.2.21
@@ -1748,7 +1748,7 @@
if (nExpiresIn == 0 && !pExpiresCV)
{
- *pppSV = (SV**)_malloc (r, sizeof (SV *)) ;
+ //*pppSV = (SV**)_malloc (r, sizeof (SV *)) ;
**pppSV = NULL ;
if (r -> bDebug & dbgCache)
lprintf (r, "[%d]CACHE: File: '%s' Processor: '%s' Step: '%s' Type:
'%c' not cached\n", r -> nPid, r -> Buf.pFile -> sSourcefile, pProcessor -> sName,
sStepName, cType) ;
@@ -1902,6 +1902,9 @@
{
if (pProcessor -> pPreCompiler)
{
+ SV * pTempSV = NULL ;
+ ppSV = &pTempSV ;
+
if ((rc = embperl_GetFromCache (r, pProcessor, 'P', "Precompiler", -1,
NULL, &bForceExpirePre, &pCVKey, &ppSV)) != ok)
return rc ;
@@ -1918,8 +1921,12 @@
DomTree_delete(DomTree_self(r -> xCurrDomTree)) ;
r -> xCurrDomTree = 0 ;
}
+ if (pTempSV)
+ SvREFCNT_dec (pTempSV) ;
return rc ;
}
+ if (pTempSV)
+ SvREFCNT_dec (pTempSV) ;
}
pProcessor = pProcessor -> pNext ;
}
@@ -1932,9 +1939,12 @@
bForceExpirePre = 0 ;
while (pProcessor && !r -> bError)
{
- SV ** ppPreCompResult = NULL ;
- SV ** ppCompResult = NULL ;
- SV ** ppExecResult = NULL ;
+ SV * pPreCompResult = NULL ;
+ SV * pCompResult = NULL ;
+ SV * pExecResult = NULL ;
+ SV ** ppPreCompResult = &pPreCompResult ;
+ SV ** ppCompResult = &pCompResult ;
+ SV ** ppExecResult = &pExecResult ;
if (pProcessor -> pPreCompiler)
{
@@ -1966,6 +1976,13 @@
r -> xCurrDomTree = DomTree_SV (*ppExecResult) ;
}
pProcessor = pProcessor -> pNext ;
+
+ if (pPreCompResult)
+ SvREFCNT_dec (pPreCompResult) ;
+ if (pCompResult)
+ SvREFCNT_dec (pCompResult) ;
+ if (pExecResult)
+ SvREFCNT_dec (pExecResult) ;
}
}
1.4.2.9 +1 -1 embperl/Attic/epdom.c
Index: epdom.c
===================================================================
RCS file: /home/cvs/embperl/Attic/epdom.c,v
retrieving revision 1.4.2.8
retrieving revision 1.4.2.9
diff -u -r1.4.2.8 -r1.4.2.9
--- epdom.c 2000/12/05 07:21:53 1.4.2.8
+++ epdom.c 2000/12/05 20:15:25 1.4.2.9
@@ -1166,7 +1166,7 @@
if (pPad -> numChilds == 0)
{
- free (pPad) ;
+ dom_free (pPad) ;
}
return pNext ;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]