This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Shortcut chasing round strtab when we're not the last reference.
[perl5.git] / hv.c
diff --git a/hv.c b/hv.c
index ae67070..1358acd 100644 (file)
--- 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;