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]

Reply via email to