summaryrefslogtreecommitdiffstats
path: root/patches/procps-3.2.8/0001-slabtop_once.patch
blob: 5d8a45195c537a5bf1b89482a231f26c0e139ec4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
From cc53eb8aee12e32861e6073d9e6bd7d015a15c55 Mon Sep 17 00:00:00 2001
From: http://ftp.de.debian.org/debian/pool/main/p/procps/procps_3.2.8-8.debian.tar.gz <info@debian.org>
Date: Fri, 19 Mar 2010 21:58:45 +0100
Subject: [PATCH 01/70] slabtop_once

---
 slabtop.c |   45 ++++++++++++++++++++++++++-------------------
 1 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/slabtop.c b/slabtop.c
index 36025e2..5c9d31e 100644
--- a/slabtop.c
+++ b/slabtop.c
@@ -268,11 +268,13 @@ static void parse_input(char c)
 	}
 }
 
+#define print_line(fmt, args...) if (run_once) printf(fmt, ## args); else printw(fmt, ## args)
 int main(int argc, char *argv[])
 {
 	int o;
 	unsigned short old_rows;
 	struct slab_info *slab_list = NULL;
+  int run_once=0;
 
 	struct option longopts[] = {
 		{ "delay",	1, NULL, 'd' },
@@ -306,6 +308,7 @@ int main(int argc, char *argv[])
 			sort_func = set_sort_func(optarg[0]);
 			break;
 		case 'o':
+      run_once=1;
 			delay = 0;
 			break;
 		case 'V':
@@ -322,11 +325,13 @@ int main(int argc, char *argv[])
 	if (tcgetattr(0, &saved_tty) == -1)
 		perror("tcgetattr");
 
-	initscr();
-	term_size(0);
 	old_rows = rows;
-	resizeterm(rows, cols);
-	signal(SIGWINCH, term_size);
+	term_size(0);
+  if (!run_once) {
+    initscr();
+	  resizeterm(rows, cols);
+	  signal(SIGWINCH, term_size);
+  }
 	signal(SIGINT, sigint_handler);
 
 	do {
@@ -340,13 +345,13 @@ int main(int argc, char *argv[])
 		if (get_slabinfo(&slab_list, &stats))
 			break;
 
-		if (old_rows != rows) {
+		if (!run_once && old_rows != rows) {
 			resizeterm(rows, cols);
 			old_rows = rows;
 		}
 
 		move(0,0);
-		printw(	" Active / Total Objects (%% used)    : %d / %d (%.1f%%)\n"
+		print_line(	" Active / Total Objects (%% used)    : %d / %d (%.1f%%)\n"
 			" Active / Total Slabs (%% used)      : %d / %d (%.1f%%)\n"
 			" Active / Total Caches (%% used)     : %d / %d (%.1f%%)\n"
 			" Active / Total Size (%% used)       : %.2fK / %.2fK (%.1f%%)\n"
@@ -361,14 +366,14 @@ int main(int argc, char *argv[])
 		slab_list = slabsort(slab_list);
 
 		attron(A_REVERSE);
-		printw(	"%6s %6s %4s %8s %6s %8s %10s %-23s\n",
+		print_line(	"%6s %6s %4s %8s %6s %8s %10s %-23s\n",
 			"OBJS", "ACTIVE", "USE", "OBJ SIZE", "SLABS",
 			"OBJ/SLAB", "CACHE SIZE", "NAME");
 		attroff(A_REVERSE);
 
 		curr = slab_list;
 		for (i = 0; i < rows - 8 && curr->next; i++) {
-			printw("%6u %6u %3u%% %7.2fK %6u %8u %9uK %-23s\n",
+			print_line("%6u %6u %3u%% %7.2fK %6u %8u %9uK %-23s\n",
 				curr->nr_objs, curr->nr_active_objs, curr->use,
 				curr->obj_size / 1024.0, curr->nr_slabs,
 				curr->objs_per_slab, (unsigned)(curr->cache_size / 1024),
@@ -376,22 +381,24 @@ int main(int argc, char *argv[])
 			curr = curr->next;
 		}
 
-		refresh();
 		put_slabinfo(slab_list);
 
-		FD_ZERO(&readfds);
-		FD_SET(0, &readfds);
-		tv.tv_sec = delay;
-		tv.tv_usec = 0;
-		if (select(1, &readfds, NULL, NULL, &tv) > 0) {
-			if (read(0, &c, 1) != 1)
-				break;
-			parse_input(c);
-		}
+		if (!run_once) {
+      refresh();
+		  FD_ZERO(&readfds);
+		  FD_SET(0, &readfds);
+		  tv.tv_sec = delay;
+		  tv.tv_usec = 0;
+		  if (select(1, &readfds, NULL, NULL, &tv) > 0) {
+			  if (read(0, &c, 1) != 1)
+				  break;
+			  parse_input(c);
+		  }
+    }
 	} while (delay);
 
 	tcsetattr(0, TCSAFLUSH, &saved_tty);
 	free_slabinfo(slab_list);
-	endwin();
+	if (!run_once) endwin();
 	return 0;
 }
-- 
1.7.0