Re: PATCH 5.7.1
Mark-Jason Dominus [Mon, 23 Apr 2001 10:30:21 +0000 (06:30 -0400)]
Message-ID: <20010423143021.17335.qmail@plover.com>

p4raw-id: //depot/perl@9792

perl.h
sv.c

diff --git a/perl.h b/perl.h
index edb14e5..01a6d3f 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -3483,23 +3483,21 @@ typedef struct am_table_short AMTS;
  * nice_chunk and nice_chunk size need to be set
  * and queried under the protection of sv_mutex
  */
-#define offer_nice_chunk(chunk, chunk_size) \
-    STMT_START {                                       \
-       LOCK_SV_MUTEX;                                  \
-       if (!PL_nice_chunk) {                           \
-           PL_nice_chunk = (char*)(chunk);             \
-           PL_nice_chunk_size = (chunk_size);          \
-       }                                               \
-       else if (chunk_size > PL_nice_chunk_size) {     \
-           Safefree(PL_nice_chunk);                    \
-           PL_nice_chunk = (char*)(chunk);             \
-          PL_nice_chunk_size = (chunk_size);           \
-       }                                               \
-       else {                                          \
-           Safefree(chunk);                            \
-       }                                               \
-       UNLOCK_SV_MUTEX;                                \
-    } STMT_END
+#define offer_nice_chunk(chunk, chunk_size) STMT_START {  \
+       void *new_chunk;                                   \
+       U32 new_chunk_size;                                \
+       LOCK_SV_MUTEX;                                     \
+       new_chunk = (void *)(chunk);                       \
+       new_chunk_size = (chunk_size);                     \
+       if (new_chunk_size > PL_nice_chunk_size) {         \
+           if (PL_nice_chunk) Safefree(PL_nice_chunk);    \
+           PL_nice_chunk = new_chunk;                     \
+           PL_nice_chunk_size = new_chunk_size;           \
+       } else {                                           \
+           Safefree(chunk);                               \
+       }                                                  \
+       UNLOCK_SV_MUTEX;                                   \
+   } STMT_END
 
 #ifdef HAS_SEM
 #   include <sys/ipc.h>
diff --git a/sv.c b/sv.c
index 5ce8a1a..e8c2372 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -137,6 +137,7 @@ S_more_sv(pTHX)
     if (PL_nice_chunk) {
        sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
        PL_nice_chunk = Nullch;
+        PL_nice_chunk_size = 0;
     }
     else {
        char *chunk;                /* must use New here to match call to */