Module Name:    src
Committed By:   christos
Date:           Wed Feb  2 03:00:45 UTC 2011

Modified Files:
        src/sys/kern: tty.c

Log Message:
fix locking and remove duplicate code.


To generate a diff of this commit:
cvs rdiff -u -r1.241 -r1.242 src/sys/kern/tty.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/tty.c
diff -u src/sys/kern/tty.c:1.241 src/sys/kern/tty.c:1.242
--- src/sys/kern/tty.c:1.241	Sun Jan 23 06:01:08 2011
+++ src/sys/kern/tty.c	Tue Feb  1 22:00:44 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: tty.c,v 1.241 2011/01/23 11:01:08 mbalmer Exp $	*/
+/*	$NetBSD: tty.c,v 1.242 2011/02/02 03:00:44 christos Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -63,7 +63,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tty.c,v 1.241 2011/01/23 11:01:08 mbalmer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tty.c,v 1.242 2011/02/02 03:00:44 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -2429,32 +2429,36 @@
 
 	mutex_enter(pick->p_lock);
 	LIST_FOREACH(l, &pick->p_lwps, l_sibling) {
+		const char *lp;
 		lwp_lock(l);
 #ifdef LWP_PC
-		if (l->l_stat == LSONPROC) {
-			snprintf(lmsg, sizeof(lmsg), "%#"PRIxVADDR"/%d",
-			    (vaddr_t)LWP_PC(l), cpu_index(l->l_cpu));
-			strlcat(buf, lmsg, bufsz);
-		} else if (l->l_stat == LSRUN) {
-			snprintf(lmsg, sizeof(lmsg), "%#"PRIxVADDR,
-			    (vaddr_t)LWP_PC(l));
-			strlcat(buf, lmsg, bufsz);
-		} else {
-			strlcat(buf, l->l_wchan ? l->l_wmesg : "iowait", bufsz);
-		} 
-		lwp_unlock(l);
-		strlcat(buf, (LIST_NEXT(l, l_sibling) != NULL) ? " " : "] ",
-		    bufsz);
+#define FMT_RUN "%#"PRIxVADDR
+#define VAL_RUNNING (vaddr_t)LWP_PC(l)
+#define VAL_RUNABLE (vaddr_t)LWP_PC(l)
 #else
-		snprintf(lmsg, sizeof(lmsg), "%s%s",
-		    l->l_stat == LSONPROC ? "running" :
-		    l->l_stat == LSRUN ? "runnable" :
-		    l->l_wchan ? l->l_wmesg : "iowait",
-		    (LIST_NEXT(l, l_sibling) != NULL) ? " " : "] ");
-		lwp_unlock(l);
-		strlcat(buf, lmsg, bufsz);
+#define FMT_RUN "%s"
+#define VAL_RUNNING "running"
+#define VAL_RUNABLE "runnable"
 #endif
+		switch (l->l_stat) {
+		case LSONPROC:
+			snprintf(lmsg, sizeof(lmsg), FMT_RUN"/%d", VAL_RUNNING,
+			    cpu_index(l->l_cpu));
+			lp = lmsg;
+			break;
+		case LSRUN:
+			snprintf(lmsg, sizeof(lmsg), FMT_RUN, VAL_RUNABLE);
+			lp = lmsg;
+			break;
+		default:
+			lp = l->l_wchan ? l->l_wmesg : "iowait";
+			break;
+		} 
+		strlcat(buf, lp, bufsz);
+		strlcat(buf, LIST_NEXT(l, l_sibling) != NULL ? " " : "] ",
+		    bufsz);
 		pctcpu += l->l_pctcpu;
+		lwp_unlock(l);
 	}
 	pctcpu += pick->p_pctcpu;
 	calcru(pick, &utime, &stime, NULL, NULL);

Reply via email to