Lines Matching refs:session

118 	struct daemon_session *session = zalloc(sizeof(*session));  in daemon__add_session()  local
120 if (!session) in daemon__add_session()
123 session->name = strdup(name); in daemon__add_session()
124 if (!session->name) { in daemon__add_session()
125 free(session); in daemon__add_session()
129 session->pid = -1; in daemon__add_session()
130 list_add_tail(&session->list, &config->sessions); in daemon__add_session()
131 return session; in daemon__add_session()
136 struct daemon_session *session; in daemon__find_session() local
138 list_for_each_entry(session, &daemon->sessions, list) { in daemon__find_session()
139 if (!strcmp(session->name, name)) in daemon__find_session()
140 return session; in daemon__find_session()
146 static int get_session_name(const char *var, char *session, int len) in get_session_name() argument
151 *session++ = *p++; in get_session_name()
153 *session = 0; in get_session_name()
159 struct daemon_session *session; in session_config() local
171 session = daemon__find_session(daemon, name); in session_config()
173 if (!session) { in session_config()
175 session = daemon__add_session(daemon, name); in session_config()
176 if (!session) in session_config()
182 session->state = RECONFIG; in session_config()
183 } else if (session->state == KILL) { in session_config()
186 session->state = OK; in session_config()
192 if (session->run) in session_config()
193 same = !strcmp(session->run, value); in session_config()
196 if (session->run) { in session_config()
197 zfree(&session->run); in session_config()
201 session->run = strdup(value); in session_config()
202 if (!session->run) in session_config()
209 session->state = RECONFIG; in session_config()
299 struct daemon_session *session; in setup_server_config() local
309 list_for_each_entry(session, &daemon->sessions, list) in setup_server_config()
310 session->state = KILL; in setup_server_config()
321 static int daemon_session__run(struct daemon_session *session, in daemon_session__run() argument
328 if (asprintf(&session->base, "%s/session-%s", in daemon_session__run()
329 daemon->base, session->name) < 0) { in daemon_session__run()
334 if (mkdir(session->base, 0755) && errno != EEXIST) { in daemon_session__run()
339 session->start = time(NULL); in daemon_session__run()
341 session->pid = fork(); in daemon_session__run()
342 if (session->pid < 0) in daemon_session__run()
344 if (session->pid > 0) { in daemon_session__run()
346 session->name, session->pid, session->run); in daemon_session__run()
350 if (chdir(session->base)) { in daemon_session__run()
385 daemon->perf, SESSION_CONTROL, SESSION_ACK, session->run); in daemon_session__run()
397 struct daemon_session *session; in handle_signalfd() local
415 list_for_each_entry(session, &daemon->sessions, list) { in handle_signalfd()
416 if (session->pid == -1) in handle_signalfd()
419 pid = waitpid(session->pid, &status, WNOHANG); in handle_signalfd()
425 session->name, WEXITSTATUS(status)); in handle_signalfd()
428 session->name, WTERMSIG(status)); in handle_signalfd()
431 session->name, WSTOPSIG(status)); in handle_signalfd()
434 session->name, status); in handle_signalfd()
437 session->state = KILL; in handle_signalfd()
438 session->pid = -1; in handle_signalfd()
444 static int daemon_session__wait(struct daemon_session *session, struct daemon *daemon, in daemon_session__wait() argument
467 } while (session->pid != -1); in daemon_session__wait()
474 struct daemon_session *session; in daemon__has_alive_session() local
476 list_for_each_entry(session, &daemon->sessions, list) { in daemon__has_alive_session()
477 if (session->pid != -1) in daemon__has_alive_session()
511 static int daemon_session__control(struct daemon_session *session, in daemon_session__control() argument
524 session->base, SESSION_CONTROL); in daemon_session__control()
533 session->base, SESSION_ACK); in daemon_session__control()
668 static int daemon_session__ping(struct daemon_session *session) in daemon_session__ping() argument
670 return daemon_session__control(session, "ping", true) ? PING_FAIL : PING_OK; in daemon_session__ping()
676 struct daemon_session *session; in cmd_session_list() local
709 list_for_each_entry(session, &daemon->sessions, list) { in cmd_session_list()
713 session->pid, in cmd_session_list()
715 csv_sep, session->name, in cmd_session_list()
717 csv_sep, session->run); in cmd_session_list()
721 csv_sep, session->base, in cmd_session_list()
723 csv_sep, session->base, SESSION_OUTPUT); in cmd_session_list()
727 csv_sep, session->base, SESSION_CONTROL, in cmd_session_list()
729 csv_sep, session->base, SESSION_ACK); in cmd_session_list()
733 csv_sep, (uint64_t)((curr - session->start) / 60)); in cmd_session_list()
738 session->pid, session->name, session->run); in cmd_session_list()
742 session->base); in cmd_session_list()
744 session->base, SESSION_OUTPUT); in cmd_session_list()
746 session->base, SESSION_CONTROL); in cmd_session_list()
748 session->base, SESSION_ACK); in cmd_session_list()
750 (uint64_t)((curr - session->start) / 60)); in cmd_session_list()
757 static int daemon_session__signal(struct daemon_session *session, int sig) in daemon_session__signal() argument
759 if (session->pid < 0) in daemon_session__signal()
761 return kill(session->pid, sig); in daemon_session__signal()
766 struct daemon_session *session; in cmd_session_kill() local
771 list_for_each_entry(session, &daemon->sessions, list) { in cmd_session_kill()
772 if (all || !strcmp(cmd->signal.name, session->name)) { in cmd_session_kill()
773 daemon_session__signal(session, cmd->signal.sig); in cmd_session_kill()
775 cmd->signal.sig, session->name, session->pid); in cmd_session_kill()
789 struct daemon_session *session; in cmd_session_ping() local
794 list_for_each_entry(session, &daemon->sessions, list) { in cmd_session_ping()
795 if (all || !strcmp(cmd->ping.name, session->name)) { in cmd_session_ping()
796 int state = daemon_session__ping(session); in cmd_session_ping()
798 fprintf(out, "%-4s %s\n", ping_str[state], session->name); in cmd_session_ping()
892 static void daemon_session__kill(struct daemon_session *session, in daemon_session__kill() argument
900 daemon_session__control(session, "stop", false); in daemon_session__kill()
903 daemon_session__signal(session, SIGTERM); in daemon_session__kill()
906 daemon_session__signal(session, SIGKILL); in daemon_session__kill()
910 session->name); in daemon_session__kill()
915 } while (daemon_session__wait(session, daemon, 10)); in daemon_session__kill()
920 struct daemon_session *session; in daemon__signal() local
922 list_for_each_entry(session, &daemon->sessions, list) in daemon__signal()
923 daemon_session__signal(session, sig); in daemon__signal()
926 static void daemon_session__delete(struct daemon_session *session) in daemon_session__delete() argument
928 zfree(&session->base); in daemon_session__delete()
929 zfree(&session->name); in daemon_session__delete()
930 zfree(&session->run); in daemon_session__delete()
931 free(session); in daemon_session__delete()
934 static void daemon_session__remove(struct daemon_session *session) in daemon_session__remove() argument
936 list_del(&session->list); in daemon_session__remove()
937 daemon_session__delete(session); in daemon_session__remove()
942 struct daemon_session *session; in daemon__stop() local
944 list_for_each_entry(session, &daemon->sessions, list) in daemon__stop()
945 daemon_session__control(session, "stop", false); in daemon__stop()
974 struct daemon_session *session, *h; in daemon__exit() local
976 list_for_each_entry_safe(session, h, &daemon->sessions, list) in daemon__exit()
977 daemon_session__remove(session); in daemon__exit()
986 struct daemon_session *session, *n; in daemon__reconfig() local
988 list_for_each_entry_safe(session, n, &daemon->sessions, list) { in daemon__reconfig()
990 if (session->state == OK) in daemon__reconfig()
994 if (session->state == KILL) { in daemon__reconfig()
995 if (session->pid > 0) { in daemon__reconfig()
996 daemon_session__kill(session, daemon); in daemon__reconfig()
997 pr_info("reconfig: session '%s' killed\n", session->name); in daemon__reconfig()
999 daemon_session__remove(session); in daemon__reconfig()
1004 if (session->pid > 0) { in daemon__reconfig()
1005 daemon_session__kill(session, daemon); in daemon__reconfig()
1006 pr_info("reconfig: session '%s' killed\n", session->name); in daemon__reconfig()
1008 if (daemon_session__run(session, daemon)) in daemon__reconfig()
1011 session->state = OK; in daemon__reconfig()