chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
core: use a bit more PID_FMT
[elogind.git]
/
src
/
core
/
unit.c
diff --git
a/src/core/unit.c
b/src/core/unit.c
index 50db86c42441727e54b81d45ce2e70b5a31e33c4..6427f9137af3085944ddbcec69fc499d22b4e8af 100644
(file)
--- a/
src/core/unit.c
+++ b/
src/core/unit.c
@@
-119,7
+119,7
@@
int unit_add_name(Unit *u, const char *text) {
if (!s)
return -ENOMEM;
if (!s)
return -ENOMEM;
- if (!unit_name_is_valid(s,
false
)) {
+ if (!unit_name_is_valid(s,
TEMPLATE_INVALID
)) {
r = -EINVAL;
goto fail;
}
r = -EINVAL;
goto fail;
}
@@
-671,6
+671,18
@@
int unit_add_exec_dependencies(Unit *u, ExecContext *c) {
assert(u);
assert(c);
assert(u);
assert(c);
+ if (c->working_directory) {
+ r = unit_require_mounts_for(u, c->working_directory);
+ if (r < 0)
+ return r;
+ }
+
+ if (c->root_directory) {
+ r = unit_require_mounts_for(u, c->root_directory);
+ if (r < 0)
+ return r;
+ }
+
if (c->std_output != EXEC_OUTPUT_KMSG &&
c->std_output != EXEC_OUTPUT_SYSLOG &&
c->std_output != EXEC_OUTPUT_JOURNAL &&
if (c->std_output != EXEC_OUTPUT_KMSG &&
c->std_output != EXEC_OUTPUT_SYSLOG &&
c->std_output != EXEC_OUTPUT_JOURNAL &&
@@
-1125,6
+1137,8
@@
_pure_ static const char *unit_get_status_message_format_try_harder(Unit *u, Job
return NULL;
}
return NULL;
}
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wformat-nonliteral"
static void unit_status_print_starting_stopping(Unit *u, JobType t) {
const char *format;
static void unit_status_print_starting_stopping(Unit *u, JobType t) {
const char *format;
@@
-1139,6
+1153,7
@@
static void unit_status_print_starting_stopping(Unit *u, JobType t) {
unit_status_printf(u, "", format);
}
unit_status_printf(u, "", format);
}
+#pragma GCC diagnostic pop
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
@@
-1301,8
+1316,11
@@
int unit_reload(Unit *u) {
if (state == UNIT_RELOADING)
return -EALREADY;
if (state == UNIT_RELOADING)
return -EALREADY;
- if (state != UNIT_ACTIVE)
+ if (state != UNIT_ACTIVE) {
+ log_warning_unit(u->id, "Unit %s cannot be reloaded because it is inactive.",
+ u->id);
return -ENOEXEC;
return -ENOEXEC;
+ }
following = unit_following(u);
if (following) {
following = unit_following(u);
if (following) {
@@
-1845,7
+1863,7
@@
static const char *resolve_template(Unit *u, const char *name, const char*path,
assert(p);
if (!name)
assert(p);
if (!name)
- name =
path_get_file_
name(path);
+ name =
base
name(path);
if (!unit_name_is_template(name)) {
*p = NULL;
if (!unit_name_is_template(name)) {
*p = NULL;
@@
-2612,7
+2630,7
@@
UnitFileState unit_get_unit_file_state(Unit *u) {
if (u->unit_file_state < 0 && u->fragment_path)
u->unit_file_state = unit_file_get_state(
u->manager->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER,
if (u->unit_file_state < 0 && u->fragment_path)
u->unit_file_state = unit_file_get_state(
u->manager->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER,
- NULL,
path_get_file_
name(u->fragment_path));
+ NULL,
base
name(u->fragment_path));
return u->unit_file_state;
}
return u->unit_file_state;
}
@@
-2920,8
+2938,7
@@
int unit_kill_context(
_cleanup_free_ char *comm = NULL;
get_process_comm(main_pid, &comm);
_cleanup_free_ char *comm = NULL;
get_process_comm(main_pid, &comm);
- log_warning_unit(u->id, "Failed to kill main process %li (%s): %s",
- (long) main_pid, strna(comm), strerror(-r));
+ log_warning_unit(u->id, "Failed to kill main process " PID_FMT " (%s): %s", main_pid, strna(comm), strerror(-r));
} else {
wait_for_exit = !main_pid_alien;
} else {
wait_for_exit = !main_pid_alien;
@@
-2937,9
+2954,7
@@
int unit_kill_context(
_cleanup_free_ char *comm = NULL;
get_process_comm(control_pid, &comm);
_cleanup_free_ char *comm = NULL;
get_process_comm(control_pid, &comm);
- log_warning_unit(u->id,
- "Failed to kill control process %li (%s): %s",
- (long) control_pid, strna(comm), strerror(-r));
+ log_warning_unit(u->id, "Failed to kill control process " PID_FMT " (%s): %s", control_pid, strna(comm), strerror(-r));
} else {
wait_for_exit = true;
} else {
wait_for_exit = true;
@@
-2948,7
+2963,7
@@
int unit_kill_context(
}
}
}
}
- if (
c->kill_mode == KILL_CONTROL_GROUP
&& u->cgroup_path) {
+ if (
(c->kill_mode == KILL_CONTROL_GROUP || (c->kill_mode == KILL_MIXED && sigkill))
&& u->cgroup_path) {
_cleanup_set_free_ Set *pid_set = NULL;
/* Exclude the main/control pids from being killed via the cgroup */
_cleanup_set_free_ Set *pid_set = NULL;
/* Exclude the main/control pids from being killed via the cgroup */
@@
-2962,6
+2977,7
@@
int unit_kill_context(
log_warning_unit(u->id, "Failed to kill control group: %s", strerror(-r));
} else if (r > 0) {
wait_for_exit = true;
log_warning_unit(u->id, "Failed to kill control group: %s", strerror(-r));
} else if (r > 0) {
wait_for_exit = true;
+
if (c->send_sighup) {
set_free(pid_set);
if (c->send_sighup) {
set_free(pid_set);
@@
-2991,17
+3007,15
@@
int unit_require_mounts_for(Unit *u, const char *path) {
* units can easily determine which units to make themselves a
* dependency of. */
* units can easily determine which units to make themselves a
* dependency of. */
+ if (!path_is_absolute(path))
+ return -EINVAL;
+
p = strdup(path);
if (!p)
return -ENOMEM;
path_kill_slashes(p);
p = strdup(path);
if (!p)
return -ENOMEM;
path_kill_slashes(p);
- if (!path_is_absolute(p)) {
- free(p);
- return -EINVAL;
- }
-
if (!path_is_safe(p)) {
free(p);
return -EPERM;
if (!path_is_safe(p)) {
free(p);
return -EPERM;