enum appstate {
as_starting, /* start in progress */
as_running, /* started and running */
- as_stopped, /* stopped */
+ as_paused, /* paused */
as_terminating, /* termination in progress */
as_terminated /* terminated */
};
{
}
-static void stopped(int runid)
+static void paused(int runid)
{
}
-static void continued(int runid)
+static void resumed(int runid)
{
}
* for 'runid' and put the runner's state to 'tostate'
* in case of success.
*
- * Only processes in the state 'as_running' or 'as_stopped'
+ * Only processes in the state 'as_running' or 'as_paused'
* can be signalled.
*
* Returns 0 in case of success or -1 in case of error.
errno = ENOENT;
rc = -1;
}
- else if (runner->state != as_running && runner->state != as_stopped) {
+ else if (runner->state != as_running && runner->state != as_paused) {
errno = EINVAL;
rc = -1;
}
pgid_remove(runner);
runner->next_by_pgid = terminated_runners;
terminated_runners = runner;
- /* ensures that all the group stops */
+ /* ensures that all the group terminates */
killpg(runner->pids[0], SIGKILL);
break;
case CLD_STOPPED:
/* update the state */
- runner->state = as_stopped;
+ runner->state = as_paused;
break;
case CLD_CONTINUED:
static json_object *mkstate(struct apprun *runner)
{
const char *state;
- struct json_object *result, *obj;
+ struct json_object *result, *obj, *pids;
int rc;
/* the structure */
if (!j_add_integer(result, "runid", runner->runid))
goto error2;
+ /* the pids */
+ switch(runner->state) {
+ case as_starting:
+ case as_running:
+ case as_paused:
+ pids = j_add_new_array(result, "pids");
+ if (!pids)
+ goto error2;
+ if (!j_add_integer(pids, NULL, runner->pids[0]))
+ goto error2;
+ if (runner->pids[1] && !j_add_integer(pids, NULL, runner->pids[1]))
+ goto error2;
+ break;
+ default:
+ break;
+ }
+
/* the state */
switch(runner->state) {
case as_starting:
case as_running:
state = "running";
break;
- case as_stopped:
- state = "stopped";
+ case as_paused:
+ state = "paused";
break;
default:
state = "terminated";
* runner. This is made using json_object_get. Thus be aware
* that further modifications to 'appli' might create errors.
*
- * Returns 0 in case of success or -1 in case of error
+ * Returns the runid in case of success or -1 in case of error
*/
int afm_run_start(struct json_object *appli, enum afm_launch_mode mode,
char **uri)
{
- static struct apprun *runner;
+ struct apprun *runner;
struct afm_launch_desc desc;
int rc;
sigset_t saved, blocked;
*
* Returns 0 in case of success or -1 in case of error
*/
-int afm_run_stop(int runid)
+int afm_run_pause(int runid)
{
- return killrunner(runid, SIGSTOP, as_stopped);
+ return killrunner(runid, SIGSTOP, as_paused);
}
/*
*
* Returns 0 in case of success or -1 in case of error
*/
-int afm_run_continue(int runid)
+int afm_run_resume(int runid)
{
return killrunner(runid, SIGCONT, as_running);
}