]> git.cameronkatri.com Git - bsdgames-darwin.git/commitdiff
Clarify how one is supposed to use the pointers returned by getutentries()
authordholland <dholland@NetBSD.org>
Sun, 13 Jul 2008 20:07:48 +0000 (20:07 +0000)
committerdholland <dholland@NetBSD.org>
Sun, 13 Jul 2008 20:07:48 +0000 (20:07 +0000)
(the utmpentry.c code), specifically with respect to who owns them and
when to free them. Now they're owned by utmpentry.c, only. Abolish the
freeutentries() function, which was the wrong abstraction; add instead
endutentries(), which flushes out the internally managed memory.

Update callers as necessary. Some (e.g. talkd) had been leaking memory;
others (e.g. syslogd) had been accidentally freeing and reloading utmp
more often than necessary. There are a couple untidy bits in users and
rwhod that someone should look after sometime, maybe.

Fixes PR bin/35131, which was about talkd's memory leak.

dm/dm.c

diff --git a/dm/dm.c b/dm/dm.c
index 2518c3690a2263c9ed752dfaaf57cf60c57bcfa8..24833da5a54493f7eba022c47d6ba55049e3ef28 100644 (file)
--- a/dm/dm.c
+++ b/dm/dm.c
@@ -1,4 +1,4 @@
-/*     $NetBSD: dm.c,v 1.24 2007/12/15 19:44:40 perry Exp $    */
+/*     $NetBSD: dm.c,v 1.25 2008/07/13 20:07:48 dholland Exp $ */
 
 /*
  * Copyright (c) 1987, 1993
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1987, 1993\n\
 #if 0
 static char sccsid[] = "@(#)dm.c       8.1 (Berkeley) 5/31/93";
 #else
-__RCSID("$NetBSD: dm.c,v 1.24 2007/12/15 19:44:40 perry Exp $");
+__RCSID("$NetBSD: dm.c,v 1.25 2008/07/13 20:07:48 dholland Exp $");
 #endif
 #endif /* not lint */
 
@@ -247,15 +247,10 @@ load(void)
 int
 users(void)
 {
-       static struct utmpentry *ohead = NULL;  
        struct utmpentry *ep;
        int nusers;
 
        nusers = getutentries(NULL, &ep);
-       if (ep != ohead) {
-               freeutentries(ep);
-               ohead = ep;
-       }
        return nusers;
 }