Patch memory leak. Replace `name_reinit' by `name_end' for more sensible
authormdw <mdw>
Wed, 20 Aug 1997 16:19:11 +0000 (16:19 +0000)
committermdw <mdw>
Wed, 20 Aug 1997 16:19:11 +0000 (16:19 +0000)
restart.  Don't try to trace when tracing's turned off.

src/netg.c

index 87afce0..79bfa02 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: netg.c,v 1.1 1997/08/07 09:45:00 mdw Exp $
+ * $Id: netg.c,v 1.2 1997/08/20 16:19:11 mdw Exp $
  *
  * A local database of netgroups
  *
 /*----- Revision history --------------------------------------------------*
  *
  * $Log: netg.c,v $
+ * Revision 1.2  1997/08/20 16:19:11  mdw
+ * Patch memory leak.  Replace `name_reinit' by `name_end' for more sensible
+ * restart.  Don't try to trace when tracing's turned off.
+ *
  * Revision 1.1  1997/08/07 09:45:00  mdw
  * New source file added to maintain a netgroups database.
  *
@@ -338,6 +342,8 @@ static int netg__foreach(int st, char *k, int ksz,
     goto duff_restart;
   }
 
+  free(c->car.atom);
+  free(c);
   free(kc);
   free(vc);
   return (0);
@@ -402,21 +408,23 @@ static void netg__dumpGroup(netg__cons *c, int lev)
  * Use:                Dumps the netgroups table.
  */
 
+#ifdef TRACING
+
 static void netg__dump(void)
 {
   sym_iter i;
   netg__sym *sng;
 
-#ifdef TRACING
   trace(TRACE_DEBUG, "debug: dumping netgroups file");
   for (sym_createIter(&i, &netg__table); (sng = sym_next(&i)) != 0; ) {
     trace(TRACE_DEBUG, "debug: netgroup `%s'...", sng->_base.name);
     sng->cons->f &= ~f_visit;
     netg__dumpGroup(sng->cons, 1);
   }
-#endif
 }
 
+#endif
+
 /* --- @netg_iterate@, @netg_iterate_r@ --- *
  *
  * Arguments:  @netg_iter *i@ = pointer to a netgroup iterator object
@@ -617,16 +625,16 @@ void netg_init(void)
   IF_TRACING(TRACE_DEBUG, netg__dump(); )
 }
 
-/* --- @netg_reinit@ --- *
+/* --- @netg_end@ --- *
  *
  * Arguments:  ---
  *
  * Returns:    ---
  *
- * Use:                Forces a re-read of the netgroups file.
+ * Use:                Empties the netgroups database.
  */
 
-void netg_reinit(void)
+void netg_end(void)
 {
   sym_iter i;
   netg__sym *sng;
@@ -643,6 +651,7 @@ void netg_reinit(void)
        if (c->car.atom->h) free(c->car.atom->h);
        if (c->car.atom->u) free(c->car.atom->u);
        if (c->car.atom->d) free(c->car.atom->d);
+       free(c->car.atom);
       }
       free(c);
       c = cc;
@@ -650,9 +659,7 @@ void netg_reinit(void)
     sym_remove(&netg__table, sng);
   }
 
-  /* --- Now rebuild the world --- */
-
-  netg_init();
+  sym_destroyTable(&netg__table);
 }
 
 /*----- Test driver -------------------------------------------------------*/