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]