From 30ad99e7b3f61a34d0ea0f6fdc5b568bb12f039e Mon Sep 17 00:00:00 2001 From: Mark-Jason Dominus Date: Mon, 23 Apr 2001 06:30:21 -0400 Subject: [PATCH] Re: PATCH 5.7.1 Message-ID: <20010423143021.17335.qmail@plover.com> p4raw-id: //depot/perl@9792 --- perl.h | 32 +++++++++++++++----------------- sv.c | 1 + 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/perl.h b/perl.h index edb14e5..01a6d3f 100644 --- 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 diff --git a/sv.c b/sv.c index 5ce8a1a..e8c2372 100644 --- 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 */ -- 2.7.4