void mail_stats_fill(struct stats_user *suser, struct mail_stats *stats_r)
{
+ static bool getrusage_broken = FALSE;
static struct rusage prev_usage;
struct rusage usage;
memset(stats_r, 0, sizeof(*stats_r));
/* cputime */
- if (getrusage(RUSAGE_SELF, &usage) < 0)
- memset(&usage, 0, sizeof(usage));
- if (timeval_diff_usecs(&usage.ru_stime, &prev_usage.ru_stime) < 0) {
+ if (getrusage(RUSAGE_SELF, &usage) < 0) {
+ if (!getrusage_broken) {
+ i_error("getrusage() failed: %m");
+ getrusage_broken = TRUE;
+ }
+ usage = prev_usage;
+ } else if (timeval_diff_usecs(&usage.ru_stime, &prev_usage.ru_stime) < 0) {
/* This seems to be a Linux bug. */
usage.ru_stime = prev_usage.ru_stime;
}