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.