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:
parent
56ba3c78ae
commit
874310b7b6
@ -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) {
|
||||||
|
@ -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)) {
|
||||||
|
|
||||||
|
@ -190,14 +190,18 @@ 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 == ENOENT)
|
||||||
|
u = t;
|
||||||
|
else {
|
||||||
|
free(t);
|
||||||
if (errno == ENOMEM || !errno)
|
if (errno == ENOMEM || !errno)
|
||||||
enomem = true;
|
enomem = true;
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
l[k++] = u;
|
l[k++] = u;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user