*error_r = t_strdup(user->error);
return -1;
}
+ process_stat_read_start(&user->proc_stat, user->event);
return 0;
}
pool_unref(&user->pool);
}
+static void mail_user_session_finished(struct mail_user *user)
+{
+ struct event *ev = user->event;
+ struct process_stat *stat = &user->proc_stat;
+
+ process_stat_read_finish(stat, ev);
+
+ struct event_passthrough *e = event_create_passthrough(ev)->
+ set_name("mail_user_session_finished")->
+ add_int_nonzero("utime", stat->utime)->
+ add_int_nonzero("stime", stat->stime)->
+ add_int_nonzero("minor_faults", stat->minor_faults)->
+ add_int_nonzero("major_faults", stat->major_faults)->
+ add_int_nonzero("vol_cs", stat->vol_cs)->
+ add_int_nonzero("invol_cs", stat->invol_cs)->
+ add_int_nonzero("rss", stat->rss)->
+ add_int_nonzero("vsz", stat->vsz)->
+ add_int_nonzero("rchar", stat->rchar)->
+ add_int_nonzero("wchar", stat->wchar)->
+ add_int_nonzero("syscr", stat->syscr)->
+ add_int_nonzero("syscw", stat->syscw);
+ e_debug(e->event(), "User session is finished");
+}
+
void mail_user_deinit(struct mail_user **user)
{
+ mail_user_session_finished(*user);
i_assert((*user)->refcount == 1);
mail_user_unref(user);
}
#include "net.h"
#include "unichar.h"
#include "mail-storage-settings.h"
+#include "process-stat.h"
struct module;
struct stats;
/* Module-specific contexts. See mail_storage_module_id. */
ARRAY(union mail_user_module_context *) module_contexts;
+ struct process_stat proc_stat;
+
/* User doesn't exist (as reported by userdb lookup when looking
up home) */
bool nonexistent:1;