diff --git a/src/fd_control.c b/src/fd_control.c
index 6630307d5a1e037c828cebc005a5f3253ffdcb03..dc76a178a2eb0925e57d44db18624db7b5b2b53b 100644
--- a/src/fd_control.c
+++ b/src/fd_control.c
@@ -10,7 +10,7 @@
 #include "error.h"
 #include "fdlib.h"
 
-RCSID("$Id: fd_control.c,v 1.28 2000/05/20 02:21:47 per Exp $");
+RCSID("$Id: fd_control.c,v 1.29 2000/05/20 18:58:53 grubba Exp $");
 
 #else /* TESTING */
 
@@ -154,7 +154,7 @@ static void grow_fds_to_close( )
   if(!fds_to_close)
     fatal("Out of memory in fd_control::grow_fds_to_close()\n"
           "Tried to allocate %d fd_datum structs\n", fds_to_close_size);
-  MEMSET( fds+(fds_size/2), 0, fds_to_close_size*sizeof(int)/2 );
+  MEMSET( fds+(fds_to_close_size/2), 0, fds_to_close_size*sizeof(int)/2 );
 }
 
 void do_close_on_exec(void)
@@ -165,6 +165,16 @@ void do_close_on_exec(void)
   }
   num_fds_to_close = 0;
 }
+
+void cleanup_close_on_exec(void)
+{
+  if (fds_to_close) {
+    free(fds_to_close);
+    fds_to_close = 0;
+    fds_to_close_size = 0;
+    num_fds_to_close = 0;
+  }
+}
 #endif /* HAVE_BROKEN_F_SETFD */
 
 int set_close_on_exec(int fd, int which)