server: Add com_tasks().
authorAndre Noll <maan@tuebingen.mpg.de>
Sun, 28 Sep 2014 17:02:46 +0000 (17:02 +0000)
committerAndre Noll <maan@tuebingen.mpg.de>
Sun, 23 Nov 2014 16:00:13 +0000 (17:00 +0100)
It is sometimes useful to see the task list of para_server. The
infrastructure for obtaining this information is already in sched.c,
so this is a rather simple matter.

client.c
command.c
server.c
server.cmd
server.h

index 4c4806f..e0c9782 100644 (file)
--- a/client.c
+++ b/client.c
@@ -208,6 +208,7 @@ I9E_DUMMY_COMPLETER(version);
 I9E_DUMMY_COMPLETER(stop);
 I9E_DUMMY_COMPLETER(addatt);
 I9E_DUMMY_COMPLETER(init);
+I9E_DUMMY_COMPLETER(tasks);
 
 static struct i9e_completer completers[];
 
index 09f00f2..6880cb4 100644 (file)
--- a/command.c
+++ b/command.c
@@ -759,6 +759,16 @@ out:
        return ret;
 }
 
+static int com_tasks(struct command_context *cc)
+{
+       char *tl = server_get_tasks();
+       int ret = 1;
+
+       if (tl)
+               ret = send_sb(&cc->scc, tl, strlen(tl), SBD_OUTPUT, false);
+       return ret;
+}
+
 /*
  * check if perms are sufficient to exec a command having perms cmd_perms.
  * Returns 0 if perms are sufficient, -E_PERM otherwise.
index b5063e2..fc81b94 100644 (file)
--- a/server.c
+++ b/server.c
@@ -113,6 +113,19 @@ struct server_command_task {
        struct task *task;
 };
 
+/**
+ * Return the list of tasks for the server process.
+ *
+ * This is called from \a com_tasks(). The helper is necessary since command
+ * handlers can not access the scheduler structure directly.
+ *
+ * \return A dynamically allocated string that must be freed by the caller.
+ */
+char *server_get_tasks(void)
+{
+       return get_task_list(&sched);
+}
+
 static int want_colors(void)
 {
        if (conf.color_arg == color_arg_no)
index ebe372b..5f46ba1 100644 (file)
@@ -108,6 +108,12 @@ U: stop
 H: Clear the 'P' (playing) bit and set the 'N' (next audio file) bit of the vss
 H: status flags, effectively stopping playback.
 ---
+N: tasks
+P: 0
+D: List server tasks.
+U: tasks
+H: For each task, print ID, status and name.
+---
 N: term
 P: VSS_READ | VSS_WRITE
 D: Ask the server to terminate.
index 16449e6..e24dd83 100644 (file)
--- a/server.h
+++ b/server.h
@@ -98,3 +98,4 @@ extern struct server_args_info conf;
 
 __noreturn void handle_connect(int fd, const char *peername);
 void parse_config_or_die(int override);
+char *server_get_tasks(void);