richter     02/03/20 00:12:53

  Modified:    .        Tag: Embperl2c epinit.c eppriv.h
  Log:
  cleanup fix
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.45  +45 -20    embperl/Attic/epinit.c
  
  Index: epinit.c
  ===================================================================
  RCS file: /home/cvs/embperl/Attic/epinit.c,v
  retrieving revision 1.1.2.44
  retrieving revision 1.1.2.45
  diff -u -r1.1.2.44 -r1.1.2.45
  --- epinit.c  20 Mar 2002 07:49:35 -0000      1.1.2.44
  +++ epinit.c  20 Mar 2002 08:12:53 -0000      1.1.2.45
  @@ -10,7 +10,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: epinit.c,v 1.1.2.44 2002/03/20 07:49:35 richter Exp $
  +#   $Id: epinit.c,v 1.1.2.45 2002/03/20 08:12:53 richter Exp $
   #
   
###################################################################################*/
   
  @@ -65,6 +65,8 @@
   
   static tMemPool * pMainPool ;
   
  +static tReq NullRequest ; /* a request object with all zero, to point for deleted 
objects */
  +
   
   /*---------------------------------------------------------------------------
   * embperl_SetupThread
  @@ -1448,6 +1450,8 @@
       {
       tReq *  r = c -> pReq ;
       epTHX_
  +    SV * pHV ;
  +    MAGIC * mg;
   
       if (c -> Param.sISA)
           {
  @@ -1491,22 +1495,30 @@
           sprintf (buf, "%d", SvREFCNT(SvRV(c -> _perlsv)) - 1) ;
           LogErrorParam (r -> pApp, rcRefcntNotOne, buf, "request.component") ;
           }            
  -    sv_unmagic(SvRV(c -> Config._perlsv), '~') ;
  +
  +
       Embperl__Component__Config_destroy(aTHX_ &c -> Config) ;
  -    SvREFCNT_dec (c -> Config._perlsv) ;
  -    sv_unmagic(SvRV(c -> Param._perlsv), '~') ;
       Embperl__Component__Param_destroy(aTHX_ &c -> Param) ;
  -    SvREFCNT_dec (c -> Param._perlsv) ;
  -    sv_unmagic(SvRV(c -> _perlsv), '~') ;
       Embperl__Component_destroy(aTHX_ c) ;
  +
  +    pHV = SvRV (c -> _perlsv) ;
  +    if (mg = mg_find (pHV, '~'))
  +        *((tComponent **)(mg -> mg_ptr)) = &NullRequest.Component ;
  +    pHV = SvRV (c -> Config._perlsv) ;
  +    if (mg = mg_find (pHV, '~'))
  +        *((tComponentConfig **)(mg -> mg_ptr)) = &NullRequest.Component.Config ;
  +    pHV = SvRV (c -> Param._perlsv) ;
  +    if (mg = mg_find (pHV, '~'))
  +        *((tComponentParam **)(mg -> mg_ptr)) = &NullRequest.Component.Param ;
  +
  +    SvREFCNT_dec (c -> Config._perlsv) ;
  +    SvREFCNT_dec (c -> Param._perlsv) ;
       SvREFCNT_dec (c -> _perlsv) ;
  -    sv_setpv(ERRSV,"");
  +
   
       if (c == &r -> Component && c -> pPrev)
           { /* we have a previous component, so let restore it */
           tComponent * pPrev = c -> pPrev;
  -        SV * pHV ;
  -        MAGIC * mg;
   
           memcpy (c, pPrev, sizeof (*c)) ;
           
  @@ -1549,10 +1561,12 @@
   
       {
       epTHX_
  -    int i ;
  -    HE *   pEntry ;
  -    I32    l ;
  -    tApp * pApp = r -> pApp ;
  +    int     i ;
  +    HE *    pEntry ;
  +    I32     l ;
  +    tApp *  pApp = r -> pApp ;
  +    SV *    pHV ;
  +    MAGIC * mg;
       dSP ;
   
       
  @@ -1618,22 +1632,33 @@
           LogErrorParam (r -> pApp, rcRefcntNotOne, buf, "request") ;
           }            
           */
  -    sv_unmagic(SvRV(r -> Config._perlsv), '~') ;
  -    Embperl__Req__Config_destroy(aTHX_ &r -> Config) ;
  -    SvREFCNT_dec (r -> Config._perlsv) ;
  -    sv_unmagic(SvRV(r -> Param._perlsv), '~') ;
  -    Embperl__Req__Param_destroy(aTHX_ &r -> Param) ;
  -    SvREFCNT_dec (r -> Param._perlsv) ;
   
       /* cleanup errarray manualy, to avoid segv incase error in destroy */
       SvREFCNT_dec (r -> pErrArray) ;
       r -> pErrArray = NULL ;
   
       
  -    sv_unmagic(SvRV(r -> _perlsv), '~') ;
  +    Embperl__Req__Config_destroy(aTHX_ &r -> Config) ;
  +    Embperl__Req__Param_destroy(aTHX_ &r -> Param) ;
       Embperl__Req_destroy(aTHX_ r) ;
  +
  +    pHV = SvRV (r -> _perlsv) ;
  +    if (mg = mg_find (pHV, '~'))
  +        *((tReq **)(mg -> mg_ptr)) = &NullRequest ;
  +    pHV = SvRV (r -> Config._perlsv) ;
  +    if (mg = mg_find (pHV, '~'))
  +        *((tReqConfig **)(mg -> mg_ptr)) = &NullRequest.Config ;
  +    pHV = SvRV (r -> Param._perlsv) ;
  +    if (mg = mg_find (pHV, '~'))
  +        *((tReqParam **)(mg -> mg_ptr)) = &NullRequest.Param ;
  +    
  +   
  +    SvREFCNT_dec (r -> Config._perlsv) ;
  +    SvREFCNT_dec (r -> Param._perlsv) ;
       SvREFCNT_dec (r -> _perlsv) ;
  +    
       ep_destroy_pool (r -> pPool) ;
  +    sv_setpv(ERRSV,"");
   
   #if defined (_DEBUG) && defined (WIN32)
       _CrtMemDumpAllObjectsSince(&r -> MemCheckpoint);    
  
  
  
  1.1.2.16  +8 -2      embperl/Attic/eppriv.h
  
  Index: eppriv.h
  ===================================================================
  RCS file: /home/cvs/embperl/Attic/eppriv.h,v
  retrieving revision 1.1.2.15
  retrieving revision 1.1.2.16
  diff -u -r1.1.2.15 -r1.1.2.16
  --- eppriv.h  4 Mar 2002 11:44:49 -0000       1.1.2.15
  +++ eppriv.h  20 Mar 2002 08:12:53 -0000      1.1.2.16
  @@ -10,7 +10,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: eppriv.h,v 1.1.2.15 2002/03/04 11:44:49 richter Exp $
  +#   $Id: eppriv.h,v 1.1.2.16 2002/03/20 08:12:53 richter Exp $
   #
   
###################################################################################*/
   
  @@ -45,6 +45,7 @@
   void boot_Embperl__Component (pTHX_ CV * cv) ;
   void boot_Embperl__Component__Config (pTHX_ CV * cv) ;
   void boot_Embperl__Component__Param (pTHX_ CV * cv) ;
  +void boot_Embperl__Component__Output (pTHX_ CV * cv) ;
   void boot_Embperl__Syntax (pTHX_ CV * cv) ;
   
   
  @@ -222,4 +223,9 @@
   void Embperl__Component__Config_new_init (pTHX_ tComponentConfig * c, SV * 
pPerlParam, int overwrite) ;
   void Embperl__Component__Param_new_init (pTHX_ tComponentParam * c, SV * 
pPerlParam, int overwrite) ;
   
  -
  +void Embperl__Req__Config_destroy(pTHX_ tReqConfig * p) ;
  +void Embperl__Req__Param_destroy(pTHX_ tReqParam * p) ;
  +void Embperl__Req_destroy(pTHX_ tReq * p) ;
  +void Embperl__Component__Config_destroy(pTHX_ tComponentConfig * p) ;
  +void Embperl__Component__Param_destroy(pTHX_ tComponentParam * p) ;
  +void Embperl__Component_destroy(pTHX_ tComponent *p) ;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to