aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2017-06-27 15:54:07 +0200
committerJosé Bollo <jose.bollo@iot.bzh>2017-06-27 15:54:07 +0200
commitc5f9125c75bd2aa7db9dfad6e2dc178fff2d2f73 (patch)
treebb0749cbeee69faadf0fc1115954cd07f775531a
parent31943af2e46375265bb865e20a6e50f365d2a6dd (diff)
Moves handling of reloads
The new version ensures that the daemons are responsibles of reloading the units. This is no more done by default. Change-Id: I9ff33a628dfc05e429dbc7bf127d641691f2a3b9 Signed-off-by: José Bollo <jose.bollo@iot.bzh>
-rw-r--r--src/afm-system-daemon.c17
-rw-r--r--src/afm-user-daemon.c7
-rw-r--r--src/wgtpkg-unit.c36
3 files changed, 21 insertions, 39 deletions
diff --git a/src/afm-system-daemon.c b/src/afm-system-daemon.c
index 969bfaa..49749bc 100644
--- a/src/afm-system-daemon.c
+++ b/src/afm-system-daemon.c
@@ -29,6 +29,7 @@
#include "verbose.h"
#include "utils-jbus.h"
#include "utils-json.h"
+#include "utils-systemd.h"
#include "afm.h"
#include "afm-db.h"
#include "wgt-info.h"
@@ -68,11 +69,21 @@ const char error_bad_request[] = "\"bad request\"";
const char error_not_found[] = "\"not found\"";
const char error_cant_start[] = "\"can't start\"";
+static void do_reloads()
+{
+#ifndef LEGACY_MODE_WITHOUT_SYSTEMD
+ /* enforce daemon reload */
+ systemd_daemon_reload(0);
+ systemd_unit_restart_name(0, "sockets.target");
+#endif
+}
+
static void on_install(struct sd_bus_message *smsg, struct json_object *req, void *unused)
{
const char *wgtfile;
const char *root;
int force;
+ int reload;
struct wgt_info *ifo;
struct json_object *resp;
@@ -82,12 +93,14 @@ static void on_install(struct sd_bus_message *smsg, struct json_object *req, voi
wgtfile = json_object_get_string(req);
root = rootdir;
force = 0;
+ reload = 1;
break;
case json_type_object:
wgtfile = j_string_at(req, "wgt", NULL);
if (wgtfile != NULL) {
root = j_string_at(req, "root", rootdir);
force = j_boolean_at(req, "force", 0);
+ reload = j_boolean_at(req, "reload", 1);
break;
}
default:
@@ -100,6 +113,10 @@ static void on_install(struct sd_bus_message *smsg, struct json_object *req, voi
if (ifo == NULL)
jbus_reply_error_s(smsg, "\"installation failed\"");
else {
+ /* reload if needed */
+ if (reload)
+ do_reloads();
+
/* build the response */
resp = json_object_new_object();
if(!resp || !j_add_string(resp, "added", wgt_info_desc(ifo)->idaver))
diff --git a/src/afm-user-daemon.c b/src/afm-user-daemon.c
index 481013f..a705381 100644
--- a/src/afm-user-daemon.c
+++ b/src/afm-user-daemon.c
@@ -488,14 +488,15 @@ static void on_uninstall(struct sd_bus_message *smsg, const char *msg, void *unu
*/
static void on_signal_changed(struct json_object *obj, void *unused)
{
+#ifdef LEGACY_MODE_WITHOUT_SYSTEMD
+ /* update the database */
+ afm_db_update_applications(afdb);
+#else
/* enforce daemon reload */
systemd_daemon_reload(1);
systemd_unit_restart_name(1, "sockets.target");
/* update the database */
-#ifdef LEGACY_MODE_WITHOUT_SYSTEMD
- afm_db_update_applications(afdb);
-#else
afm_udb_update(afudb);
#endif
/* re-propagate now */
diff --git a/src/wgtpkg-unit.c b/src/wgtpkg-unit.c
index e6e67bf..8607eb4 100644
--- a/src/wgtpkg-unit.c
+++ b/src/wgtpkg-unit.c
@@ -470,36 +470,6 @@ static int get_wants_target(char *path, size_t pathlen, const struct unitdesc *d
return rc;
}
-static int do_send_reload(const struct generatedesc *desc)
-{
- int i;
- int reloadsys, reloadusr;
- const struct unitdesc *u;
-
- reloadsys = reloadusr = 0;
- for (i = 0 ; i < desc->nunits ; i++) {
- u = &desc->units[i];
- if (u->wanted_by != NULL) {
- switch (u->scope) {
- case unitscope_user:
- reloadusr = 1;
- break;
- case unitscope_system:
- reloadsys = 1;
- break;
- default:
- break;
- }
- }
- }
-
- if (reloadusr)
- reloadusr = systemd_daemon_reload(1);
- if (reloadsys)
- reloadsys = systemd_daemon_reload(0);
- return 0;
-}
-
static int do_uninstall_units(void *closure, const struct generatedesc *desc)
{
int rc, rc2;
@@ -527,9 +497,6 @@ static int do_uninstall_units(void *closure, const struct generatedesc *desc)
if (rc2 < 0 && rc == 0)
rc = rc2;
}
- rc2 = do_send_reload(desc);
- if (rc2 < 0 && rc == 0)
- rc = rc2;
return rc;
}
@@ -564,9 +531,6 @@ static int do_install_units(void *closure, const struct generatedesc *desc)
if (rc < 0)
goto error;
}
- rc = do_send_reload(desc);
- if (rc < 0)
- goto error;
return 0;
error:
i = errno;