You are viewing a plain text version of this content. The canonical link for it is here.
Posted to embperl-cvs@perl.apache.org by ri...@apache.org on 2004/08/09 21:44:45 UTC

cvs commit: embperl Changes.pod Old.xs ep.h epinit.c eputil.c

richter     2004/08/09 12:44:45

  Modified:    .        Changes.pod Old.xs ep.h epinit.c eputil.c
  Log:
  fix segafult within warning during initialisation
  
  Revision  Changes    Path
  1.243     +3 -1      embperl/Changes.pod
  
  Index: Changes.pod
  ===================================================================
  RCS file: /home/cvs/embperl/Changes.pod,v
  retrieving revision 1.242
  retrieving revision 1.243
  diff -u -r1.242 -r1.243
  --- Changes.pod	20 Jul 2004 08:25:21 -0000	1.242
  +++ Changes.pod	9 Aug 2004 19:44:44 -0000	1.243
  @@ -13,7 +13,9 @@
      - Fixed test and compile problems on Windows with Perl 5.8.3
      - Added more verbose error informations for PerlHash error
      - Fixed problem when unloading Embperl.so under Apache, which cause
  -     Perl Hash error and/or segfault.
  +     Perl Hash error and/or segfault.
  +   - Fixed SegFault that occured when a Perl warning should be logged during
  +     initialisation.
   
   =head1 2.0b11  15. March 2004
   
  
  
  
  1.8       +15 -5     embperl/Old.xs
  
  Index: Old.xs
  ===================================================================
  RCS file: /home/cvs/embperl/Old.xs,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Old.xs	14 Mar 2004 18:54:43 -0000	1.7
  +++ Old.xs	9 Aug 2004 19:44:44 -0000	1.8
  @@ -60,8 +60,13 @@
           r -> pApacheReqSV = pApacheReqSV ;
           }
   #endif
  -     strncpy (r->errdat1, sText, sizeof (r->errdat1) - 1) ;
  -     LogError (r,code) ;
  +    if (r)
  +         {
  +         strncpy (r->errdat1, sText, sizeof (r->errdat1) - 1) ;
  +         LogError (r,code) ;
  +         }
  +    else
  +        LogErrorParam(NULL, code, sText, NULL) ;
   #ifdef APACHE
       if (bRestore)
           {
  @@ -139,7 +144,7 @@
   INIT:
       tReq * r = CurrReq ;
   CODE:
  -    RETVAL = r -> Component.sSourcefile ;
  +    RETVAL = r?r -> Component.sSourcefile:"" ;
   OUTPUT:
       RETVAL
   
  @@ -210,8 +215,13 @@
           r -> pApacheReqSV = pApacheReqSV ;
           }
   #endif
  -     strncpy (r->errdat1, sText, sizeof (r->errdat1) - 1) ;
  -     LogError (r,code) ;
  +    if (r)
  +         {
  +         strncpy (r->errdat1, sText, sizeof (r->errdat1) - 1) ;
  +         LogError (r,code) ;
  +         }
  +    else
  +        LogErrorParam(NULL, code, sText, NULL) ;
   #ifdef APACHE
       if (bRestore)
           {
  
  
  
  1.43      +19 -20    embperl/ep.h
  
  Index: ep.h
  ===================================================================
  RCS file: /home/cvs/embperl/ep.h,v
  retrieving revision 1.42
  retrieving revision 1.43
  diff -u -r1.42 -r1.43
  --- ep.h	8 Jul 2004 08:31:00 -0000	1.42
  +++ ep.h	9 Aug 2004 19:44:44 -0000	1.43
  @@ -718,47 +718,46 @@
   
   
   #undef newSV
  -#define newSV(len) AddDMallocMagic(Perl_newSV((len)), "newSV  ", __FILE__, __LINE__) 
  +#define newSV(len) AddDMallocMagic(Perl_newSV(aTHX_ (len)), "newSV  ", __FILE__, __LINE__) 
   
   #undef newSViv
  -#define newSViv(i) AddDMallocMagic(Perl_newSViv((i)), "newSViv  ", __FILE__, __LINE__) 
  -#define newSVivDBG1(i,txt) AddDMallocMagic(Perl_newSViv((i)), txt, __FILE__, __LINE__) 
  +#define newSViv(i) AddDMallocMagic(Perl_newSViv(aTHX_ (i)), "newSViv  ", __FILE__, __LINE__) 
  +#define newSVivDBG1(i,txt) AddDMallocMagic(Perl_newSViv(aTHX_ (i)), txt, __FILE__, __LINE__) 
   
   #undef newSVnv
  -#define newSVnv(n) AddDMallocMagic(Perl_newSVnv((n)), "newSVnv  ", __FILE__, __LINE__) 
  +#define newSVnv(n) AddDMallocMagic(Perl_newSVnv(aTHX_ (n)), "newSVnv  ", __FILE__, __LINE__) 
   
   #undef newSVpv
  -#define newSVpv(s,len) AddDMallocMagic(Perl_newSVpv((s),(len)), "newSVpv  ", __FILE__, __LINE__) 
  +#define newSVpv(s,len) AddDMallocMagic(Perl_newSVpv(aTHX_ (s),(len)), "newSVpv  ", __FILE__, __LINE__) 
   
   #undef newSVpvn
  -#define newSVpvn(s,len) AddDMallocMagic(Perl_newSVpvn((s),(len)), "newSVpvn  ", __FILE__, __LINE__) 
  +#define newSVpvn(s,len) AddDMallocMagic(Perl_newSVpvn(aTHX_ (s),(len)), "newSVpvn  ", __FILE__, __LINE__) 
   
   #undef newSVrv
  -#define newSVrv(rv,c) AddDMallocMagic(Perl_newSVrv((rv),(c)), "newSVrv  ", __FILE__, __LINE__) 
  +#define newSVrv(rv,c) AddDMallocMagic(Perl_newSVrv(aTHX_ (rv),(c)), "newSVrv  ", __FILE__, __LINE__) 
   
   #undef newSVsv
  -#define newSVsv(sv) AddDMallocMagic(Perl_newSVsv((sv)), "newSVsv  ", __FILE__, __LINE__) 
  +#define newSVsv(sv) AddDMallocMagic(Perl_newSVsv(aTHX_ (sv)), "newSVsv  ", __FILE__, __LINE__) 
   
   #undef newSVpvf2
   #define newSVpvf2(sv) AddDMallocMagic((sv), "newSVsvf  ", __FILE__, __LINE__) ; SvTAINTED_off (sv) 
   
   #undef perl_get_sv
  -#define perl_get_sv(name,create) AddDMallocMagic(perl_get_sv(name,create), "perl_get_sv  ", __FILE__, __LINE__) 
  -
  -#undef perl_get_cv
  -#define perl_get_cv(name,create) (CV *)AddDMallocMagic((SV *)perl_get_cv(name,create), "perl_get_cv  ", __FILE__, __LINE__) 
  -
  -#undef perl_get_hv
  -#define perl_get_hv(name,create) (HV *)AddDMallocMagic((SV *)perl_get_hv(name,create), "perl_get_hv  ", __FILE__, __LINE__) 
  -
  -#undef perl_get_av
  -#define perl_get_av(name,create) (AV *)AddDMallocMagic((SV *)perl_get_av(name,create), "perl_get_av  ", __FILE__, __LINE__) 
  +#undef perl_get_cv
  +#undef perl_get_hv
  +#undef perl_get_av
  +
  +
  +#define perl_get_sv(name,create) AddDMallocMagic(Perl_get_sv(aTHX_ name,create), "perl_get_sv  ", __FILE__, __LINE__) 
  +#define perl_get_cv(name,create) (CV *)AddDMallocMagic((SV *)Perl_get_cv(aTHX_ name,create), "perl_get_cv  ", __FILE__, __LINE__) 
  +#define perl_get_hv(name,create) (HV *)AddDMallocMagic((SV *)Perl_get_hv(aTHX_ name,create), "perl_get_hv  ", __FILE__, __LINE__) 
  +#define perl_get_av(name,create) (AV *)AddDMallocMagic((SV *)Perl_get_av(aTHX_ name,create), "perl_get_av  ", __FILE__, __LINE__) 
   
   #undef newHV
  -#define newHV() (HV *)AddDMallocMagic((SV *)Perl_newHV(), "newHV  ", __FILE__, __LINE__) 
  +#define newHV() (HV *)AddDMallocMagic((SV *)Perl_newHV(aTHX), "newHV  ", __FILE__, __LINE__) 
   
   #undef newAV
  -#define newAV() (AV *)AddDMallocMagic((SV *)Perl_newAV(), "newAV  ", __FILE__, __LINE__) 
  +#define newAV() (AV *)AddDMallocMagic((SV *)Perl_newAV(aTHX), "newAV  ", __FILE__, __LINE__) 
   
   #else
   
  
  
  
  1.15      +5 -6      embperl/epinit.c
  
  Index: epinit.c
  ===================================================================
  RCS file: /home/cvs/embperl/epinit.c,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- epinit.c	20 Jul 2004 08:25:23 -0000	1.14
  +++ epinit.c	9 Aug 2004 19:44:44 -0000	1.15
  @@ -26,7 +26,6 @@
                         storing a PL_sv_undef with Perl 5.8.0 in a hash
                         Perl takes it as a placeholder and pretents it isn't there :-( */
   
  -
   #ifndef PERL_IMPLICIT_CONTEXT
   
   SV * embperl_ThreadDataRV ;
  @@ -1250,7 +1249,7 @@
   static void embperl_LogStartReq (/*i/o*/ req * r)
   
       {
  -    epTHX ;
  +    epTHX ;
       
       if (r -> Config.bDebug)
           {
  @@ -1258,7 +1257,7 @@
           lprintf (r -> pApp,  "[%d]REQ: ***** Start Request at %s", r -> pThread -> nPid, ctime (&t)) ;
           lprintf (r -> pApp,  "[%d]Use App: %s\n", r -> pApp -> pThread -> nPid, r -> pApp -> Config.sAppName) ; 
   #ifdef DMALLOC
  -        dmalloc_message ("[%d]REQ: Start Request at %s\n", r -> pThread -> nPid, ctime (time(NULL))) ; 
  +        dmalloc_message ("[%d]REQ: Start Request at %s\n", r -> pThread -> nPid, ctime (&t)) ; 
   #endif        
           }
   
  @@ -1798,8 +1797,8 @@
   #ifdef DMALLOC
   			    /* unsigned long mark, int not_freed_b, int freed_b, int details_b */
       dmalloc_log_changed (r -> MemCheckpoint, 1, 0, 1) ;
  -    dmalloc_message ( "[%d]%sRequest freed. Entry-SVs: %d -OBJs: %d Exit-SVs: %d -OBJs: %d\n", r -> pThread -> nPid,
  -	    (r -> Component.pPrev?"Sub-":""), r -> stsv_count, r -> stsv_objcount, sv_count, sv_objcount) ;
  +    dmalloc_message ( "[%d]%sRequest freed. Entry-SVs: %d -OBJs: %%d Exit-SVs: %d -OBJs: %%d\n", r -> pThread -> nPid,
  +	    (r -> Component.pPrev?"Sub-":""), r -> stsv_count, /*r -> stsv_objcount, */sv_count/*, sv_objcount*/) ;
   #endif    
       if (r -> Config.bDebug)
   	DomStats (r -> pApp) ;
  
  
  
  1.38      +14 -7     embperl/eputil.c
  
  Index: eputil.c
  ===================================================================
  RCS file: /home/cvs/embperl/eputil.c,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- eputil.c	7 Mar 2004 19:44:14 -0000	1.37
  +++ eputil.c	9 Aug 2004 19:44:44 -0000	1.38
  @@ -19,7 +19,6 @@
   #include "epmacro.h"
   
   
  -
   /* ---------------------------------------------------------------------------- */
   /* Output a string and escape html special character to html special            */
   /* representation (&xxx;)                                                       */
  @@ -1076,8 +1075,12 @@
   int GetLineNo (/*i/o*/ register req * r)
   
       {
  -    char * pPos = r -> Component.pCurrPos ;
  +    char * pPos  ;
  +
  +    if (r == NULL) 
  +        return 0 ;
       
  +    pPos = r -> Component.pCurrPos ;
       return GetLineNoOf (r, pPos) ;
       }
   
  @@ -2046,6 +2049,8 @@
       }
   
   static MGVTBL DMalloc_mvtTab = { NULL, NULL, NULL, NULL, RemoveDMallocMagic } ;
  +
  +#define MGTTYPE '.'
   
   SV * AddDMallocMagic (/*in*/ SV *	pSV,
   		      /*in*/ char *     sText,
  @@ -2053,15 +2058,17 @@
   		      /*in*/ int        nLine) 
   
       {
  -    if (pSV && (!SvMAGICAL(pSV) || !mg_find (pSV, '~')))
  +    dTHX ;
  +
  +    if (pSV && (!SvMAGICAL(pSV) || !mg_find (pSV, MGTTYPE)))
   	{
   	char * s = _strdup_leap(sFile, nLine, sText) ;
   	struct magic * pMagic ;
       
  -	if ((!SvMAGICAL(pSV) || !(pMagic = mg_find (pSV, '~'))))
  +	if ((!SvMAGICAL(pSV) || !(pMagic = mg_find (pSV, MGTTYPE))))
   	    {
  -	    sv_magic ((SV *)pSV, NULL, '~', (char *)&s, sizeof (s)) ;
  -	    pMagic = mg_find (pSV, '~') ;
  +	    sv_magic ((SV *)pSV, NULL, MGTTYPE, (char *)&s, sizeof (s)) ;
  +	    pMagic = mg_find (pSV, MGTTYPE) ;
   	    }
   
   	if (pMagic)
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-cvs-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-cvs-help@perl.apache.org