int main(int argc, char *argv[]) {
_cleanup_free_ char *build = NULL;
- struct sigaction sig;
+ struct sigaction sig = {
+ .sa_handler = signal_handler,
+ };
struct ps_struct *ps;
char output_file[PATH_MAX];
char datestr[200];
}
/* handle TERM/INT nicely */
- memset(&sig, 0, sizeof(struct sigaction));
- sig.sa_handler = signal_handler;
sigaction(SIGHUP, &sig, NULL);
interval = (1.0 / arg_hz) * 1000000000.0;
log_uptime();
/* main program loop */
- while (!exiting) {
+ for (samples = 0; !exiting && samples < arg_samples_len; samples++) {
int res;
double sample_stop;
struct timespec req;
NULL);
/* wait for /proc to become available, discarding samples */
- if (!(graph_start > 0.0))
+ if (graph_start <= 0.0)
log_uptime();
else
log_sample(samples);
* we'll lose all the missed samples and overrun our total
* time
*/
- if ((newint_ns > 0) || (newint_s > 0)) {
+ if (newint_ns > 0 || newint_s > 0) {
req.tv_sec = newint_s;
req.tv_nsec = newint_ns;
} else {
overrun++;
/* calculate how many samples we lost and scrap them */
- arg_samples_len = arg_samples_len + ((int)(newint_ns / interval));
+ arg_samples_len -= (int)(newint_ns / interval);
}
-
- samples++;
-
- if (samples > arg_samples_len)
- break;
-
}
/* do some cleanup, close fd's */