summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2016-11-14 11:40:58 +0100
committerJosé Bollo <jose.bollo@iot.bzh>2016-11-14 11:40:58 +0100
commitb6ac54640c918aecaf2f28edf82f8217154b12f3 (patch)
treea280d44ae51aa5d381e013b8771be5b67ed22be9
parentf78a0ee51dec80ff2b1319aa3ca14ab7e95baa78 (diff)
afm-run: adds helper functions
Adds function to summarize state of runners: is_running, is_paused, is_alive, is_dead Change-Id: I2a46be3c3a2079a5e43cde5f8ed18aab391ea05b Signed-off-by: José Bollo <jose.bollo@iot.bzh>
-rw-r--r--src/afm-run.c71
1 files changed, 59 insertions, 12 deletions
diff --git a/src/afm-run.c b/src/afm-run.c
index 8e76a99..537ba62 100644
--- a/src/afm-run.c
+++ b/src/afm-run.c
@@ -180,6 +180,61 @@ static void pgid_remove(struct apprun *runner)
/****************** manages runners (by runid) **********************/
/*
+ * Is a 'runner' alive?
+ */
+static inline int is_alive(struct apprun *runner)
+{
+ switch(runner->state) {
+ case as_terminating:
+ case as_terminated:
+ return 0;
+ default:
+ return 1;
+ }
+}
+
+/*
+ * Is a 'runner' dead?
+ */
+static inline int is_dead(struct apprun *runner)
+{
+ switch(runner->state) {
+ case as_terminating:
+ case as_terminated:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+/*
+ * Is a 'runner' running?
+ */
+static inline int is_running(struct apprun *runner)
+{
+ switch(runner->state) {
+ case as_starting:
+ case as_running:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+/*
+ * Is a 'runner' paused?
+ */
+static inline int is_paused(struct apprun *runner)
+{
+ switch(runner->state) {
+ case as_paused:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+/*
* Get a runner by its 'runid' (NULL if not found)
*/
static struct apprun *getrunner(int runid)
@@ -315,7 +370,7 @@ static int killrunner(int runid, int sig, enum appstate tostate)
errno = ENOENT;
rc = -1;
}
- else if (runner->state != as_running && runner->state != as_paused) {
+ else if (is_dead(runner)) {
errno = EINVAL;
rc = -1;
}
@@ -434,10 +489,7 @@ static json_object *mkstate(struct apprun *runner)
goto error2;
/* the pids */
- switch(runner->state) {
- case as_starting:
- case as_running:
- case as_paused:
+ if (is_alive(runner)) {
pids = j_add_new_array(result, "pids");
if (!pids)
goto error2;
@@ -445,9 +497,6 @@ static json_object *mkstate(struct apprun *runner)
goto error2;
if (runner->pids[1] && !j_add_integer(pids, NULL, runner->pids[1]))
goto error2;
- break;
- default:
- break;
}
/* the state */
@@ -593,8 +642,7 @@ struct json_object *afm_run_list()
for (i = 0 ; i < ROOT_RUNNERS_COUNT ; i++) {
runner = runners_by_runid[i];
while (runner) {
- if (runner->state != as_terminating
- && runner->state != as_terminated) {
+ if (is_alive(runner)) {
/* adds the living runner */
obj = mkstate(runner);
if (obj == NULL)
@@ -624,8 +672,7 @@ error:
struct json_object *afm_run_state(int runid)
{
struct apprun *runner = getrunner(runid);
- if (runner == NULL || runner->state == as_terminating
- || runner->state == as_terminated) {
+ if (runner == NULL || is_dead(runner)) {
errno = ENOENT;
return NULL;
}