Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 29 May 2004 00:10:09 -0700 (PDT)
From:      Michael Conlen <meconlen@obfuscated.net>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: bin/67317: patch to nfsd.c to make it slightly more dynamic
Message-ID:  <200405290710.i4T7A9xW016896@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/67317; it has been noted by GNATS.

From: Michael Conlen <meconlen@obfuscated.net>
To: freebsd-gnats-submit@FreeBSD.org, meconlen@obfuscated.net
Cc:  
Subject: Re: bin/67317: patch to nfsd.c to make it slightly more dynamic
Date: Sat, 29 May 2004 03:01:13 -0400

 Proper diffs. Forgot that the variables in the functions should be 
 static, not sure how to test that properly, but I'd suspect a system 
 might act funny when you tried to kill nfsd with the previous patch, 
 until it segfaulted. This is the first C code I've done in six months, 
 so look over it, though it seems to work fine on a system doing lots of 
 volume.
 
 Cheers.
 
 
 7a8,9
  >  * Modified by Michael Conlen May 28, 2004
  >  *
 75a78,80
  >
  > #include <stdarg.h>
  >
 84d88
 < #define	MAXNFSDCNT	20
 86,87d89
 < pid_t	children[MAXNFSDCNT];	/* PIDs of children */
 < int	nfsdcnt;		/* number of children */
 91c93
 < void	killchildren(void);
 ---
  > void	killchildren(int, ...);
 94c96
 < void	reapchild(int);
 ---
  > void	reapchild(int, ...);
 139a142,143
  > 	pid_t	*children;
  > 	int	nfsdcnt;
 159,163d162
 < 			if (nfsdcnt < 1 || nfsdcnt > MAXNFSDCNT) {
 < 				warnx("nfsd count %d; reset to %d", nfsdcnt,
 < 				    DEFNFSDCNT);
 < 				nfsdcnt = DEFNFSDCNT;
 < 			}
 203,207d201
 < 		if (nfsdcnt < 1 || nfsdcnt > MAXNFSDCNT) {
 < 			warnx("nfsd count %d; reset to %d", nfsdcnt,
 < 			    DEFNFSDCNT);
 < 			nfsdcnt = DEFNFSDCNT;
 < 		}
 335a330,339
  >
  > 	/* allocate children */
  > 	children = calloc(nfsdcnt, sizeof(pid_t));
  > 	if(children == NULL ) {
  > 		syslog(LOG_ERR, "malloc: %m");
  > 		nfsd_exit(1);
  > 	}
  > 	reapchild(0, children, nfsdcnt);
  > 	killchildren(0, children, nfsdcnt);
  >
 770,771c774
 < reapchild(signo)
 < 	int signo;
 ---
  > reapchild(int signo, ...)
 775a779,791
  > 	va_list argp;
  > 	pid_t *children;
  > 	int nfsdcnt;
  >
  > 	if(signo == 0) {
  > 		va_start(argp, signo);
  > 		children = va_arg(argp, pid_t *);
  > 		nfsdcnt = va_arg(argp, int);	
  > 		va_end(argp);
  > 		return;
  > 	}	
  >
  >
 791,792c807,809
 < void
 < killchildren()
 ---
  > /* we need something before the ..., better hack than globals */
  >
  > void killchildren(int signo, ...)
 795a813,826
  >
  > 	va_list argp;
  > 	pid_t *children;
  > 	int nfsdcnt;
  >
  > 	if(signo == 0) {
  > 		va_start(argp, signo);
  > 		children = va_arg(argp, pid_t *);
  > 		nfsdcnt = va_arg(argp, int);	
  > 		va_end(argp);
  > 		return;
  > 	}	
  >
  >
 823c854
 < 	killchildren();
 ---
  > 	killchildren(0);
 842a874
  >
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200405290710.i4T7A9xW016896>