Lines Matching refs:session

117 	struct daemon_session *session = zalloc(sizeof(*session));  in daemon__add_session()  local
119 if (!session) in daemon__add_session()
122 session->name = strdup(name); in daemon__add_session()
123 if (!session->name) { in daemon__add_session()
124 free(session); in daemon__add_session()
128 session->pid = -1; in daemon__add_session()
129 list_add_tail(&session->list, &config->sessions); in daemon__add_session()
130 return session; in daemon__add_session()
135 struct daemon_session *session; in daemon__find_session() local
137 list_for_each_entry(session, &daemon->sessions, list) { in daemon__find_session()
138 if (!strcmp(session->name, name)) in daemon__find_session()
139 return session; in daemon__find_session()
145 static int get_session_name(const char *var, char *session, int len) in get_session_name() argument
150 *session++ = *p++; in get_session_name()
152 *session = 0; in get_session_name()
158 struct daemon_session *session; in session_config() local
170 session = daemon__find_session(daemon, name); in session_config()
172 if (!session) { in session_config()
174 session = daemon__add_session(daemon, name); in session_config()
175 if (!session) in session_config()
181 session->state = RECONFIG; in session_config()
182 } else if (session->state == KILL) { in session_config()
185 session->state = OK; in session_config()
191 if (session->run) in session_config()
192 same = !strcmp(session->run, value); in session_config()
195 if (session->run) { in session_config()
196 zfree(&session->run); in session_config()
200 session->run = strdup(value); in session_config()
201 if (!session->run) in session_config()
208 session->state = RECONFIG; in session_config()
298 struct daemon_session *session; in setup_server_config() local
308 list_for_each_entry(session, &daemon->sessions, list) in setup_server_config()
309 session->state = KILL; in setup_server_config()
320 static int daemon_session__run(struct daemon_session *session, in daemon_session__run() argument
327 if (asprintf(&session->base, "%s/session-%s", in daemon_session__run()
328 daemon->base, session->name) < 0) { in daemon_session__run()
333 if (mkdir(session->base, 0755) && errno != EEXIST) { in daemon_session__run()
338 session->start = time(NULL); in daemon_session__run()
340 session->pid = fork(); in daemon_session__run()
341 if (session->pid < 0) in daemon_session__run()
343 if (session->pid > 0) { in daemon_session__run()
345 session->name, session->pid, session->run); in daemon_session__run()
349 if (chdir(session->base)) { in daemon_session__run()
384 daemon->perf, SESSION_CONTROL, SESSION_ACK, session->run); in daemon_session__run()
396 struct daemon_session *session; in handle_signalfd() local
414 list_for_each_entry(session, &daemon->sessions, list) { in handle_signalfd()
415 if (session->pid == -1) in handle_signalfd()
418 pid = waitpid(session->pid, &status, WNOHANG); in handle_signalfd()
424 session->name, WEXITSTATUS(status)); in handle_signalfd()
427 session->name, WTERMSIG(status)); in handle_signalfd()
430 session->name, WSTOPSIG(status)); in handle_signalfd()
433 session->name, status); in handle_signalfd()
436 session->state = KILL; in handle_signalfd()
437 session->pid = -1; in handle_signalfd()
443 static int daemon_session__wait(struct daemon_session *session, struct daemon *daemon, in daemon_session__wait() argument
466 } while (session->pid != -1); in daemon_session__wait()
473 struct daemon_session *session; in daemon__has_alive_session() local
475 list_for_each_entry(session, &daemon->sessions, list) { in daemon__has_alive_session()
476 if (session->pid != -1) in daemon__has_alive_session()
510 static int daemon_session__control(struct daemon_session *session, in daemon_session__control() argument
523 session->base, SESSION_CONTROL); in daemon_session__control()
532 session->base, SESSION_ACK); in daemon_session__control()
667 static int daemon_session__ping(struct daemon_session *session) in daemon_session__ping() argument
669 return daemon_session__control(session, "ping", true) ? PING_FAIL : PING_OK; in daemon_session__ping()
675 struct daemon_session *session; in cmd_session_list() local
708 list_for_each_entry(session, &daemon->sessions, list) { in cmd_session_list()
712 session->pid, in cmd_session_list()
714 csv_sep, session->name, in cmd_session_list()
716 csv_sep, session->run); in cmd_session_list()
720 csv_sep, session->base, in cmd_session_list()
722 csv_sep, session->base, SESSION_OUTPUT); in cmd_session_list()
726 csv_sep, session->base, SESSION_CONTROL, in cmd_session_list()
728 csv_sep, session->base, SESSION_ACK); in cmd_session_list()
732 csv_sep, (curr - session->start) / 60); in cmd_session_list()
737 session->pid, session->name, session->run); in cmd_session_list()
741 session->base); in cmd_session_list()
743 session->base, SESSION_OUTPUT); in cmd_session_list()
745 session->base, SESSION_CONTROL); in cmd_session_list()
747 session->base, SESSION_ACK); in cmd_session_list()
749 (curr - session->start) / 60); in cmd_session_list()
756 static int daemon_session__signal(struct daemon_session *session, int sig) in daemon_session__signal() argument
758 if (session->pid < 0) in daemon_session__signal()
760 return kill(session->pid, sig); in daemon_session__signal()
765 struct daemon_session *session; in cmd_session_kill() local
770 list_for_each_entry(session, &daemon->sessions, list) { in cmd_session_kill()
771 if (all || !strcmp(cmd->signal.name, session->name)) { in cmd_session_kill()
772 daemon_session__signal(session, cmd->signal.sig); in cmd_session_kill()
774 cmd->signal.sig, session->name, session->pid); in cmd_session_kill()
788 struct daemon_session *session; in cmd_session_ping() local
793 list_for_each_entry(session, &daemon->sessions, list) { in cmd_session_ping()
794 if (all || !strcmp(cmd->ping.name, session->name)) { in cmd_session_ping()
795 int state = daemon_session__ping(session); in cmd_session_ping()
797 fprintf(out, "%-4s %s\n", ping_str[state], session->name); in cmd_session_ping()
891 static void daemon_session__kill(struct daemon_session *session, in daemon_session__kill() argument
899 daemon_session__control(session, "stop", false); in daemon_session__kill()
902 daemon_session__signal(session, SIGTERM); in daemon_session__kill()
905 daemon_session__signal(session, SIGKILL); in daemon_session__kill()
909 session->name); in daemon_session__kill()
914 } while (daemon_session__wait(session, daemon, 10)); in daemon_session__kill()
919 struct daemon_session *session; in daemon__signal() local
921 list_for_each_entry(session, &daemon->sessions, list) in daemon__signal()
922 daemon_session__signal(session, sig); in daemon__signal()
925 static void daemon_session__delete(struct daemon_session *session) in daemon_session__delete() argument
927 zfree(&session->base); in daemon_session__delete()
928 zfree(&session->name); in daemon_session__delete()
929 zfree(&session->run); in daemon_session__delete()
930 free(session); in daemon_session__delete()
933 static void daemon_session__remove(struct daemon_session *session) in daemon_session__remove() argument
935 list_del(&session->list); in daemon_session__remove()
936 daemon_session__delete(session); in daemon_session__remove()
941 struct daemon_session *session; in daemon__stop() local
943 list_for_each_entry(session, &daemon->sessions, list) in daemon__stop()
944 daemon_session__control(session, "stop", false); in daemon__stop()
973 struct daemon_session *session, *h; in daemon__exit() local
975 list_for_each_entry_safe(session, h, &daemon->sessions, list) in daemon__exit()
976 daemon_session__remove(session); in daemon__exit()
985 struct daemon_session *session, *n; in daemon__reconfig() local
987 list_for_each_entry_safe(session, n, &daemon->sessions, list) { in daemon__reconfig()
989 if (session->state == OK) in daemon__reconfig()
993 if (session->state == KILL) { in daemon__reconfig()
994 if (session->pid > 0) { in daemon__reconfig()
995 daemon_session__kill(session, daemon); in daemon__reconfig()
996 pr_info("reconfig: session '%s' killed\n", session->name); in daemon__reconfig()
998 daemon_session__remove(session); in daemon__reconfig()
1003 if (session->pid > 0) { in daemon__reconfig()
1004 daemon_session__kill(session, daemon); in daemon__reconfig()
1005 pr_info("reconfig: session '%s' killed\n", session->name); in daemon__reconfig()
1007 if (daemon_session__run(session, daemon)) in daemon__reconfig()
1010 session->state = OK; in daemon__reconfig()