@@ -61,43 +61,46 @@ will lead to quite erratic information inside ``/proc/stat``::
6161
6262 static volatile sig_atomic_t stop;
6363
64- static void sighandler (int signr)
64+ static void sighandler(int signr)
6565 {
66- (void) signr;
67- stop = 1;
66+ (void) signr;
67+ stop = 1;
6868 }
69+
6970 static unsigned long hog (unsigned long niters)
7071 {
71- stop = 0;
72- while (!stop && --niters);
73- return niters;
72+ stop = 0;
73+ while (!stop && --niters);
74+ return niters;
7475 }
76+
7577 int main (void)
7678 {
77- int i;
78- struct itimerval it = { .it_interval = { .tv_sec = 0, .tv_usec = 1 },
79- .it_value = { .tv_sec = 0, .tv_usec = 1 } };
80- sigset_t set;
81- unsigned long v[HIST];
82- double tmp = 0.0;
83- unsigned long n;
84- signal (SIGALRM, &sighandler);
85- setitimer (ITIMER_REAL, &it, NULL);
86-
87- hog (ULONG_MAX);
88- for (i = 0; i < HIST; ++i) v[i] = ULONG_MAX - hog (ULONG_MAX);
89- for (i = 0; i < HIST; ++i) tmp += v[i];
90- tmp /= HIST;
91- n = tmp - (tmp / 3.0);
92-
93- sigemptyset (&set);
94- sigaddset (&set, SIGALRM);
95-
96- for (;;) {
97- hog (n);
98- sigwait (&set, &i);
99- }
100- return 0;
79+ int i;
80+ struct itimerval it = {
81+ .it_interval = { .tv_sec = 0, .tv_usec = 1 },
82+ .it_value = { .tv_sec = 0, .tv_usec = 1 } };
83+ sigset_t set;
84+ unsigned long v[HIST];
85+ double tmp = 0.0;
86+ unsigned long n;
87+ signal(SIGALRM, &sighandler);
88+ setitimer(ITIMER_REAL, &it, NULL);
89+
90+ hog (ULONG_MAX);
91+ for (i = 0; i < HIST; ++i) v[i] = ULONG_MAX - hog(ULONG_MAX);
92+ for (i = 0; i < HIST; ++i) tmp += v[i];
93+ tmp /= HIST;
94+ n = tmp - (tmp / 3.0);
95+
96+ sigemptyset(&set);
97+ sigaddset(&set, SIGALRM);
98+
99+ for (;;) {
100+ hog(n);
101+ sigwait(&set, &i);
102+ }
103+ return 0;
101104 }
102105
103106
0 commit comments