diff options
Diffstat (limited to 'src/timer.c')
-rw-r--r-- | src/timer.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/src/timer.c b/src/timer.c index 1634462..cece63a 100644 --- a/src/timer.c +++ b/src/timer.c @@ -1,47 +1,46 @@ /* wydawca - automatic release submission daemon Copyright (C) 2008, 2009, 2010 Sergey Poznyakoff Wydawca is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. Wydawca is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with wydawca. If not, see <http://www.gnu.org/licenses/>. */ #include <wydawca.h> #include <sys/time.h> #include <sys/resource.h> #include <unistd.h> #include <string.h> #include <ctype.h> -#include <xalloc.h> struct timer_slot { char *name; double real; double self_user; /* user time in sec */ double self_system; /* system time in sec */ double children_user; /* user time in sec */ double children_system; /* system time in sec */ struct timeval real_mark; struct rusage self_mark; struct rusage children_mark; }; static struct grecs_symtab *timer_table; static size_t _timer_count; static unsigned hash_string_ci (const char *string, unsigned long n_buckets) { size_t value = 0; unsigned char ch; for (; (ch = *string); string++) @@ -161,77 +160,77 @@ timer_format_time (double t) char *str = NULL; size_t size = 0; if (t < 600) grecs_asprintf (&str, &size, "%0.3f", t); else { long int s, m, h, d; s = (long int) t; d = s / (3600 * 24); s -= d * 3600 * 24; h = s / 3600; s -= h * 3600; m = s / 60; s -= m * 60; if (d) grecs_asprintf (&str, &size, "%ld+%02ld:%02ld:%02ld", d, h, m, s); else if (h) grecs_asprintf (&str, &size, "%02ld:%02ld:%02ld", h, m, s); else grecs_asprintf (&str, &size, "%02ld:%02ld", m, s); } if (!str) - xalloc_die (); + grecs_alloc_die (); return str; } size_t timer_get_count () { return _timer_count; } struct timer_data { struct metadef *def; size_t num; }; int _fill_meta (void *sym, void *data) { struct timer_slot *slot = sym; struct timer_data *tp = data; #define CREATE_DEF(arg) \ if (tp->num) \ { \ char *buf = NULL; \ size_t size = 0; \ grecs_asprintf (&buf, &size, "timer:%s:%s", slot->name, #arg); \ if (!buf) \ - xalloc_die (); \ + grecs_alloc_die (); \ tp->def->kw = buf; \ tp->def->storage = timer_format_time (__cat2__(timer_get_,arg) (slot)); \ tp->def->value = tp->def->storage; \ tp->def->expand = NULL; \ tp->def++; \ tp->num--; \ } CREATE_DEF(system); CREATE_DEF(real); CREATE_DEF(user); return tp->num <= 0; } void timer_fill_meta (struct metadef *def, size_t num) { struct timer_data td; if (!timer_table) return; td.def = def; td.num = num; grecs_symtab_enumerate (timer_table, _fill_meta, &td); |