1
0
mirror of https://github.com/systemd/systemd.git synced 2024-11-06 08:26:52 +03:00

systemd: do not remove empty paths from unit lookup path

The ability to start a new unit with 'systemctl start ...' should not
depend on whether there are other units in the directory. Previously,
an additional 'systemctl daemon-reload' would be necessary to tell
systemd to update the list of unit lookup paths.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2013-02-06 22:49:19 -05:00
parent 56ba3c78ae
commit 874310b7b6
3 changed files with 15 additions and 14 deletions

View File

@ -621,14 +621,15 @@ int manager_coldplug(Manager *m) {
static void manager_build_unit_path_cache(Manager *m) { static void manager_build_unit_path_cache(Manager *m) {
char **i; char **i;
DIR *d = NULL; DIR _cleanup_free_ *d = NULL;
int r; int r;
assert(m); assert(m);
set_free_free(m->unit_path_cache); set_free_free(m->unit_path_cache);
if (!(m->unit_path_cache = set_new(string_hash_func, string_compare_func))) { m->unit_path_cache = set_new(string_hash_func, string_compare_func);
if (!m->unit_path_cache) {
log_error("Failed to allocate unit path cache."); log_error("Failed to allocate unit path cache.");
return; return;
} }
@ -641,7 +642,8 @@ static void manager_build_unit_path_cache(Manager *m) {
d = opendir(*i); d = opendir(*i);
if (!d) { if (!d) {
log_error("Failed to open directory: %m"); if (errno != ENOENT)
log_error("Failed to open directory %s: %m", *i);
continue; continue;
} }
@ -657,7 +659,8 @@ static void manager_build_unit_path_cache(Manager *m) {
goto fail; goto fail;
} }
if ((r = set_put(m->unit_path_cache, p)) < 0) { r = set_put(m->unit_path_cache, p);
if (r < 0) {
free(p); free(p);
goto fail; goto fail;
} }
@ -674,9 +677,6 @@ fail:
set_free_free(m->unit_path_cache); set_free_free(m->unit_path_cache);
m->unit_path_cache = NULL; m->unit_path_cache = NULL;
if (d)
closedir(d);
} }
int manager_startup(Manager *m, FILE *serialization, FDSet *fds) { int manager_startup(Manager *m, FILE *serialization, FDSet *fds) {

View File

@ -316,7 +316,6 @@ int lookup_paths_init(
return -ENOMEM; return -ENOMEM;
strv_uniq(p->unit_path); strv_uniq(p->unit_path);
path_strv_remove_empty(p->unit_path);
if (!strv_isempty(p->unit_path)) { if (!strv_isempty(p->unit_path)) {
@ -379,8 +378,6 @@ int lookup_paths_init(
strv_uniq(p->sysvinit_path); strv_uniq(p->sysvinit_path);
strv_uniq(p->sysvrcnd_path); strv_uniq(p->sysvrcnd_path);
path_strv_remove_empty(p->sysvinit_path);
path_strv_remove_empty(p->sysvrcnd_path);
if (!strv_isempty(p->sysvinit_path)) { if (!strv_isempty(p->sysvinit_path)) {

View File

@ -190,13 +190,17 @@ char **path_strv_canonicalize(char **l) {
errno = 0; errno = 0;
u = canonicalize_file_name(t); u = canonicalize_file_name(t);
free(t);
if (!u) { if (!u) {
if (errno == ENOMEM || !errno) if (errno == ENOENT)
enomem = true; u = t;
else {
free(t);
if (errno == ENOMEM || !errno)
enomem = true;
continue; continue;
}
} }
l[k++] = u; l[k++] = u;