#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"
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;
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:
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))
*/
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 */
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;
if (rc2 < 0 && rc == 0)
rc = rc2;
}
- rc2 = do_send_reload(desc);
- if (rc2 < 0 && rc == 0)
- rc = rc2;
return rc;
}
if (rc < 0)
goto error;
}
- rc = do_send_reload(desc);
- if (rc < 0)
- goto error;
return 0;
error:
i = errno;