blead valgrind finding
Jarkko Hietaniemi [Wed, 18 Oct 2006 20:07:54 +0000 (16:07 -0400)]
Message-ID: <4536C1DA.4060600@iki.fi>

p4raw-id: //depot/perl@29045

perlio.c

index ddc0ad8..63164c4 100644 (file)
--- a/perlio.c
+++ b/perlio.c
@@ -2367,6 +2367,20 @@ PerlIO_cleanup(pTHX)
 #else
     PerlIO_debug("Cleanup layers\n");
 #endif
+
+#ifdef DEBUGGING
+    {
+       /* By now all filehandles should have been closed, so any
+        * stray (non-STD-)filehandles indicate *possible* (PerlIO)
+        * errors. */
+       for (i = 3; i < PL_perlio_fd_refcnt_size; i++) {
+           if (PL_perlio_fd_refcnt[i])
+               PerlIO_debug("PerlIO_cleanup: fd %d refcnt=%d\n",
+                            i, PL_perlio_fd_refcnt[i]);
+       }
+    }
+#endif
+
     /* Raise STDIN..STDERR refcount so we don't close them */
     for (i=0; i < 3; i++)
        PerlIOUnix_refcnt_inc(i);
@@ -2383,6 +2397,15 @@ PerlIO_cleanup(pTHX)
        PerlIO_list_free(aTHX_ PL_def_layerlist);
        PL_def_layerlist = NULL;
     }
+
+#ifdef USE_ITHREADS
+    /* only main thread can free refcnt table */
+    if (PL_curinterp == aTHX)
+#endif
+    {
+       Safefree(PL_perlio_fd_refcnt);
+       PL_perlio_fd_refcnt = NULL;
+    }
 }