From 29404ae038d75e5ffd5727a026889b0987db9cd5 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Sun, 12 Jun 2005 21:08:33 +0000 Subject: Shortcut chasing round strtab when we're not the last reference. p4raw-id: //depot/perl@24809 --- hv.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'hv.c') diff --git a/hv.c b/hv.c index ae67070954..1358acd07d 100644 --- a/hv.c +++ b/hv.c @@ -2170,6 +2170,15 @@ S_unshare_hek_or_pvn(pTHX_ const HEK *hek, const char *str, I32 len, U32 hash) /* Assert that the caller passed us a genuine (or at least consistent) shared hek */ assert (he->shared_he_he.hent_hek == hek); + + LOCK_STRTAB_MUTEX; + if (he->shared_he_he.hent_val - 1) { + --he->shared_he_he.hent_val; + UNLOCK_STRTAB_MUTEX; + return; + } + UNLOCK_STRTAB_MUTEX; + hash = HEK_HASH(hek); } else if (len < 0) { STRLEN tmplen = -len; -- cgit v1.2.1