From: Timo Sirainen Date: Mon, 15 Mar 2021 15:21:03 +0000 (+0200) Subject: lib: cpu-limit - Move cpu_limit_get_usage_msecs() X-Git-Tag: 2.3.15~216 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e83d620cb6ca2894fc3e66e26e3d717eb968d3ce;p=thirdparty%2Fdovecot%2Fcore.git lib: cpu-limit - Move cpu_limit_get_usage_msecs() --- diff --git a/src/lib/cpu-limit.c b/src/lib/cpu-limit.c index 76d01b7018..88d5189a82 100644 --- a/src/lib/cpu-limit.c +++ b/src/lib/cpu-limit.c @@ -38,6 +38,32 @@ cpu_limit_handler(const siginfo_t *si ATTR_UNUSED, void *context ATTR_UNUSED) } } +unsigned int +cpu_limit_get_usage_msecs(struct cpu_limit *climit, enum cpu_limit_type type) +{ + struct rusage rusage; + struct timeval cpu_usage = { 0, 0 }; + int usage_diff; + + /* Query cpu usage so far */ + if (getrusage(RUSAGE_SELF, &rusage) < 0) + i_fatal("getrusage() failed: %m"); + if ((type & CPU_LIMIT_TYPE_USER) != 0) + timeval_add(&cpu_usage, &rusage.ru_utime); + if ((type & CPU_LIMIT_TYPE_SYSTEM) != 0) + timeval_add(&cpu_usage, &rusage.ru_stime); + + struct timeval initial_total = { 0, 0 }; + if ((type & CPU_LIMIT_TYPE_USER) != 0) + timeval_add(&initial_total, &climit->initial_usage.ru_utime); + if ((type & CPU_LIMIT_TYPE_SYSTEM) != 0) + timeval_add(&initial_total, &climit->initial_usage.ru_stime); + usage_diff = timeval_diff_msecs(&cpu_usage, &initial_total); + i_assert(usage_diff >= 0); + + return (unsigned int)usage_diff; +} + #undef cpu_limit_init struct cpu_limit * cpu_limit_init(unsigned int cpu_limit_sec, @@ -111,32 +137,6 @@ cpu_limit_init(unsigned int cpu_limit_sec, return climit; } -unsigned int -cpu_limit_get_usage_msecs(struct cpu_limit *climit, enum cpu_limit_type type) -{ - struct rusage rusage; - struct timeval cpu_usage = { 0, 0 }; - int usage_diff; - - /* Query cpu usage so far */ - if (getrusage(RUSAGE_SELF, &rusage) < 0) - i_fatal("getrusage() failed: %m"); - if ((type & CPU_LIMIT_TYPE_USER) != 0) - timeval_add(&cpu_usage, &rusage.ru_utime); - if ((type & CPU_LIMIT_TYPE_SYSTEM) != 0) - timeval_add(&cpu_usage, &rusage.ru_stime); - - struct timeval initial_total = { 0, 0 }; - if ((type & CPU_LIMIT_TYPE_USER) != 0) - timeval_add(&initial_total, &climit->initial_usage.ru_utime); - if ((type & CPU_LIMIT_TYPE_SYSTEM) != 0) - timeval_add(&initial_total, &climit->initial_usage.ru_stime); - usage_diff = timeval_diff_msecs(&cpu_usage, &initial_total); - i_assert(usage_diff >= 0); - - return (unsigned int)usage_diff; -} - void cpu_limit_deinit(struct cpu_limit **_climit) { struct cpu_limit *climit = *_climit;