Change 29477 by [EMAIL PROTECTED] on 2006/12/06 14:08:49

        Subject: [PATCH] Re: When should PERL_SYS_TERM() be called? [was: Re: 
[PATCH] Re: [PATCH] Re: [PATCH] abstract mempool header testing]
        From: Jarkko Hietaniemi <[EMAIL PROTECTED]>
        Date: Tue, 05 Dec 2006 16:08:33 -0500
        Message-ID: <[EMAIL PROTECTED]>
        
        Fixes a problem spotted by Jan Dubois:
        
        The PerlMemShared pool is only shared between the interpreters that
        can share data structures (interpreters created by perl_clone(), which
        mean pseudo-fork, and threads.xs).  The pool is not shared between
        interpreters that are created separately by perl_alloc().
        [...]
        I guess this means PL_perlio_fd_refcnt needs to be allocated and
        freed by standard malloc() and not go through any abstraction.

Affected files ...

... //depot/perl/perlio.c#355 edit

Differences ...

==== //depot/perl/perlio.c#355 (text) ====
Index: perl/perlio.c
--- perl/perlio.c#354~29465~    2006-12-05 01:41:44.000000000 -0800
+++ perl/perlio.c       2006-12-06 06:08:49.000000000 -0800
@@ -2278,8 +2278,9 @@
 
     assert (new_max > new_fd);
 
-    new_array =
-       (int*) PerlMemShared_realloc(PL_perlio_fd_refcnt, new_max * 
sizeof(int));
+    /* Use plain realloc() since we need this memory to be really
+     * global and visible to all the interpreters and/or threads. */
+    new_array = (int*) realloc(PL_perlio_fd_refcnt, new_max * sizeof(int));
 
     if (!new_array) {
 #ifdef USE_ITHREADS
@@ -2412,19 +2413,14 @@
        }
     }
 #endif
-#if !defined(WIN32) || !defined(PERL_IMPLICIT_SYS)
-    /* On Windows, under PERL_IMPLICIT_SYS, all memory allocated by
-     * PerlMemShared_...() will be freed anyways when PL_curinterp
-     * is being destroyed. */
+    /* Not bothering with PL_perlio_mutex since by now
+     * all the interpreters are gone. */
     if (PL_perlio_fd_refcnt_size /* Assuming initial size of zero. */
         && PL_perlio_fd_refcnt) {
-       /* Not bothering with PL_perlio_mutex since by now all the
-        * interpreters are gone. */
-       PerlMemShared_free(PL_perlio_fd_refcnt);
+       free(PL_perlio_fd_refcnt); /* To match realloc() in 
S_more_refcounted_fds(). */
        PL_perlio_fd_refcnt = NULL;
        PL_perlio_fd_refcnt_size = 0;
     }
-#endif
 }
 
 
End of Patch.

Reply via email to