/*
- Copyright (C) 2015-2018 IoT.bzh
+ Copyright (C) 2015-2020 IoT.bzh
author: José Bollo <jose.bollo@iot.bzh>
static const char *wait_state_stable(int isuser, const char *dpath)
{
- const char *state;
+ int trial, count;
+ const char *state = NULL;
- for (;;) {
+ count = 10;
+ for (trial = 1 ; trial <= count ; trial++) {
state = systemd_unit_state_of_dpath(isuser, dpath);
if (state == NULL || state == SysD_State_Active
|| state == SysD_State_Failed)
return state;
- /* TODO: sleep */
+ sleep(1);
}
+ return state;
}
/*
}
rc = systemd_unit_pid_of_dpath(isuser, udpath);
- if (rc < 0) {
+ if (rc <= 0) {
j_read_string_at(appli, "unit-scope", &uscope);
j_read_string_at(appli, "unit-name", &uname);
ERROR("can't getpid of %s unit %s for uid %d: %m", uscope, uname, uid);
*
* Returns the list or NULL in case of error.
*/
-struct json_object *afm_urun_list(struct afm_udb *db, int uid)
+struct json_object *afm_urun_list(struct afm_udb *db, int all, int uid)
{
int i, n, isuser, pid;
const char *udpath;
if (result == NULL)
goto error;
- apps = afm_udb_applications_private(db, uid);
+ apps = afm_udb_applications_private(db, all, uid);
n = json_object_array_length(apps);
for (i = 0 ; i < n ; i++) {
appli = json_object_array_get_idx(apps, i);
WARNING("searched runid %d not found", runid);
} else {
/* search in the base */
- apps = afm_udb_applications_private(db, uid);
+ apps = afm_udb_applications_private(db, 1, uid);
n = json_object_array_length(apps);
for (i = 0 ; i < n ; i++) {
appli = json_object_array_get_idx(apps, i);
&& j_read_string_at(appli, "id", &id)) {
pid = systemd_unit_pid_of_dpath(isuser, udpath);
state = systemd_unit_state_of_dpath(isuser, dpath);
- if (state == SysD_State_Active)
+ if (pid > 0 && state == SysD_State_Active)
result = mkstate(id, runid, pid, state);
goto end;
}
pid = -1;
} else {
pid = systemd_unit_pid_of_dpath(isuser, udpath);
+ if (pid == 0) {
+ errno = ESRCH;
+ pid = -1;
+ }
}
return pid;
}