Re: When Storable and Devel::DProf mix, core dump [perl #19385]
Blair Zajac [Wed, 8 Jan 2003 12:28:35 +0000 (04:28 -0800)]
Message-ID: <3E1C89F3.2B4759C@orcaware.com>

p4raw-id: //depot/perl@18526

ext/Devel/DProf/Changes
ext/Devel/DProf/DProf.pm
ext/Devel/DProf/DProf.xs
ext/Devel/DProf/Makefile.PL

index 216498b..09b2250 100644 (file)
@@ -1,3 +1,12 @@
+2003 Jan 8
+
+ Blair Zajac:
+  DProf.xs:
+    - To avoid core dumps, increase stack size by 10 instead of 5.
+    - Assert that g_profstack is large enough when DEBUGGING is defined
+  DProf.pm:
+    - Bump VERSION.
+
 1999 Jan 8
 
  Ilya Zakharevich:
index d5d8a82..15fc93a 100644 (file)
@@ -188,7 +188,7 @@ sub DB {
 use XSLoader ();
 
 # Underscore to allow older Perls to access older version from CPAN
-$Devel::DProf::VERSION = '20000000.00_01';  # this version not authorized by
+$Devel::DProf::VERSION = '20030108.00_00';  # this version not authorized by
                                     # Dean Roehrich. See "Changes" file.
 
 XSLoader::load 'Devel::DProf', $Devel::DProf::VERSION;
index 78ea3c9..caa0729 100644 (file)
@@ -9,6 +9,12 @@
 /* define DBG_TIMER to cause a warning when the timer is turned on and off. */
 /*#define DBG_TIMER 1  */
 
+#ifdef DEBUGGING
+#define ASSERT(x) assert(x)
+#else
+#define ASSERT(x)
+#endif
+
 #ifdef DBG_SUB
 #  define DBG_SUB_NOTIFY(A) dprof_dbg_sub_notify(A)
 void
@@ -297,7 +303,7 @@ prof_mark(pTHX_ opcode ptype)
     SV *Sub = GvSV(PL_DBsub);  /* name of current sub */
 
     if (g_SAVE_STACK) {
-       if (g_profstack_ix + 5 > g_profstack_max) {
+       if (g_profstack_ix + 10 > g_profstack_max) {
                g_profstack_max = g_profstack_max * 3 / 2;
                Renew(g_profstack, g_profstack_max, PROFANY);
        }
@@ -309,6 +315,7 @@ prof_mark(pTHX_ opcode ptype)
     sdelta = t.tms_stime - g_otms_stime;
     if (rdelta || udelta || sdelta) {
        if (g_SAVE_STACK) {
+           ASSERT(g_profstack_ix + 4 <= g_profstack_max);
            g_profstack[g_profstack_ix++].ptype = OP_TIME;
            g_profstack[g_profstack_ix++].tms_utime = udelta;
            g_profstack[g_profstack_ix++].tms_stime = sdelta;
@@ -343,6 +350,7 @@ prof_mark(pTHX_ opcode ptype)
            if (CvXSUB(cv) == XS_Devel__DProf_END)
                return;
            if (g_SAVE_STACK) { /* Store it for later recording  -JH */
+               ASSERT(g_profstack_ix + 4 <= g_profstack_max);
                g_profstack[g_profstack_ix++].ptype = OP_GV;
                g_profstack[g_profstack_ix++].id = id;
                g_profstack[g_profstack_ix++].name = pname;
@@ -365,6 +373,7 @@ prof_mark(pTHX_ opcode ptype)
 
     g_total++;
     if (g_SAVE_STACK) { /* Store it for later recording  -JH */
+       ASSERT(g_profstack_ix + 2 <= g_profstack_max);
        g_profstack[g_profstack_ix++].ptype = ptype;
        g_profstack[g_profstack_ix++].id = id;
 
index 667cc52..b3eb6c5 100644 (file)
@@ -1,3 +1,7 @@
+BEGIN {
+       require 5.006;
+}
+
 use ExtUtils::MakeMaker;
 
 WriteMakefile(