X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fmanager.c;h=b4b963a66265e5c006aabb1c4e1b0a6530befbf6;hb=2ded0c0442f597dc397f7b0e9a15cf453578d11e;hp=735a1aaa4de9a5716b3db279984e87d1e7b65f6f;hpb=2149e37c7954fd98acd54269df5f5eca78eb9d5b;p=elogind.git diff --git a/src/manager.c b/src/manager.c index 735a1aaa4..b4b963a66 100644 --- a/src/manager.c +++ b/src/manager.c @@ -241,6 +241,12 @@ static int manager_find_paths(Manager *m) { assert(m); + /* Unset previous data, in case we are called on reload */ + strv_free(m->unit_path); + strv_free(m->sysvinit_path); + strv_free(m->sysvrcnd_path); + m->unit_path = m->sysvinit_path = m->sysvrcnd_path = NULL; + /* First priority is whatever has been passed to us via env * vars */ if ((e = getenv("SYSTEMD_UNIT_PATH"))) @@ -548,6 +554,19 @@ static void manager_clear_jobs_and_units(Manager *m) { while ((u = hashmap_first(m->units))) unit_free(u); + + manager_dispatch_cleanup_queue(m); + + assert(!m->load_queue); + assert(!m->run_queue); + assert(!m->dbus_unit_queue); + assert(!m->dbus_job_queue); + assert(!m->cleanup_queue); + assert(!m->gc_queue); + + assert(hashmap_isempty(m->transaction_jobs)); + assert(hashmap_isempty(m->jobs)); + assert(hashmap_isempty(m->units)); } void manager_free(Manager *m) { @@ -555,7 +574,6 @@ void manager_free(Manager *m) { assert(m); - manager_dispatch_cleanup_queue(m); manager_clear_jobs_and_units(m); for (c = 0; c < _UNIT_TYPE_MAX; c++) @@ -2334,6 +2352,10 @@ int manager_reload(Manager *m) { /* From here on there is no way back. */ manager_clear_jobs_and_units(m); + /* Find new unit paths */ + if ((q = manager_find_paths(m)) < 0) + r = q; + /* First, enumerate what we can from all config files */ if ((q = manager_enumerate(m)) < 0) r = q;