chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
service: remove unneccesary Socket.got_socket_fd
[elogind.git]
/
src
/
core
/
service.c
diff --git
a/src/core/service.c
b/src/core/service.c
index e408338b10de04adca84fe22b1e4069cc5274256..530a305b4bd00dbc6efd5b7a60683c45b30c442d 100644
(file)
--- a/
src/core/service.c
+++ b/
src/core/service.c
@@
-304,7
+304,8
@@
static void service_done(Unit *u) {
s->status_text = NULL;
cgroup_context_done(&s->cgroup_context);
s->status_text = NULL;
cgroup_context_done(&s->cgroup_context);
- exec_context_done(&s->exec_context, manager_is_reloading_or_reexecuting(u->manager));
+ exec_context_done(&s->exec_context);
+ s->exec_runtime = exec_runtime_unref(s->exec_runtime);
exec_command_free_array(s->exec_command, _SERVICE_EXEC_COMMAND_MAX);
s->control_command = NULL;
s->main_command = NULL;
exec_command_free_array(s->exec_command, _SERVICE_EXEC_COMMAND_MAX);
s->control_command = NULL;
s->main_command = NULL;
@@
-1751,6
+1752,10
@@
static int service_spawn(
unit_realize_cgroup(UNIT(s));
unit_realize_cgroup(UNIT(s));
+ r = unit_setup_exec_runtime(UNIT(s));
+ if (r < 0)
+ goto fail;
+
if (pass_fds ||
s->exec_context.std_input == EXEC_INPUT_SOCKET ||
s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
if (pass_fds ||
s->exec_context.std_input == EXEC_INPUT_SOCKET ||
s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
@@
-1834,6
+1839,7
@@
static int service_spawn(
path,
UNIT(s)->id,
s->type == SERVICE_IDLE ? UNIT(s)->manager->idle_pipe : NULL,
path,
UNIT(s)->id,
s->type == SERVICE_IDLE ? UNIT(s)->manager->idle_pipe : NULL,
+ s->exec_runtime,
&pid);
if (r < 0)
goto fail;
&pid);
if (r < 0)
goto fail;
@@
-1932,7
+1938,8
@@
static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart)
s->forbid_restart = false;
/* we want fresh tmpdirs in case service is started again immediately */
s->forbid_restart = false;
/* we want fresh tmpdirs in case service is started again immediately */
- exec_context_tmp_dirs_done(&s->exec_context);
+ exec_runtime_destroy(s->exec_runtime);
+ s->exec_runtime = exec_runtime_unref(s->exec_runtime);
/* Try to delete the pid file. At this point it will be
* out-of-date, and some software might be confused by it, so
/* Try to delete the pid file. At this point it will be
* out-of-date, and some software might be confused by it, so
@@
-2642,12
+2649,6
@@
static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
dual_timestamp_serialize(f, "watchdog-timestamp",
&s->watchdog_timestamp);
dual_timestamp_serialize(f, "watchdog-timestamp",
&s->watchdog_timestamp);
- if (s->exec_context.tmp_dir)
- unit_serialize_item(u, f, "tmp-dir", s->exec_context.tmp_dir);
-
- if (s->exec_context.var_tmp_dir)
- unit_serialize_item(u, f, "var-tmp-dir", s->exec_context.var_tmp_dir);
-
if (s->forbid_restart)
unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
if (s->forbid_restart)
unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
@@
-2771,23
+2772,7
@@
static int service_deserialize_item(Unit *u, const char *key, const char *value,
dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
else if (streq(key, "watchdog-timestamp"))
dual_timestamp_deserialize(value, &s->watchdog_timestamp);
dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
else if (streq(key, "watchdog-timestamp"))
dual_timestamp_deserialize(value, &s->watchdog_timestamp);
- else if (streq(key, "tmp-dir")) {
- char *t;
-
- t = strdup(value);
- if (!t)
- return log_oom();
-
- s->exec_context.tmp_dir = t;
- } else if (streq(key, "var-tmp-dir")) {
- char *t;
-
- t = strdup(value);
- if (!t)
- return log_oom();
-
- s->exec_context.var_tmp_dir = t;
- } else if (streq(key, "forbid-restart")) {
+ else if (streq(key, "forbid-restart")) {
int b;
b = parse_boolean(value);
int b;
b = parse_boolean(value);
@@
-2842,7
+2827,7
@@
_pure_ static bool service_check_snapshot(Unit *u) {
assert(s);
assert(s);
- return
!s->got_socket_fd
;
+ return
(s->socket_fd < 0)
;
}
static int service_retry_pid_file(Service *s) {
}
static int service_retry_pid_file(Service *s) {
@@
-2916,7
+2901,12
@@
static int service_demand_pid_file(Service *s) {
}
static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
}
static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
- Service *s = SERVICE(userdata);
+ PathSpec *p = userdata;
+ Service *s;
+
+ assert(p);
+
+ s = SERVICE(p->unit);
assert(s);
assert(fd >= 0);
assert(s);
assert(fd >= 0);
@@
-2926,7
+2916,7
@@
static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events,
log_debug_unit(UNIT(s)->id, "inotify event for %s", UNIT(s)->id);
log_debug_unit(UNIT(s)->id, "inotify event for %s", UNIT(s)->id);
- if (path_spec_fd_event(
s->pid_file_pathspec
, events) < 0)
+ if (path_spec_fd_event(
p
, events) < 0)
goto fail;
if (service_retry_pid_file(s) == 0)
goto fail;
if (service_retry_pid_file(s) == 0)
@@
-3502,7
+3492,7
@@
static int service_enumerate(Manager *m) {
d = opendir(path);
if (!d) {
if (errno != ENOENT)
d = opendir(path);
if (!d) {
if (errno != ENOENT)
- log_warning("opendir(%s) failed: %
s", path, strerror(errno)
);
+ log_warning("opendir(%s) failed: %
m", path
);
continue;
}
continue;
}
@@
-3535,7
+3525,7
@@
static int service_enumerate(Manager *m) {
if (access(fpath, X_OK) < 0) {
if (errno != ENOENT)
if (access(fpath, X_OK) < 0) {
if (errno != ENOENT)
- log_warning("access() failed on %s: %
s", fpath, strerror(errno)
);
+ log_warning("access() failed on %s: %
m", fpath
);
continue;
}
continue;
}
@@
-3683,11
+3673,14
@@
static void service_bus_name_owner_change(
s->state == SERVICE_RUNNING ||
s->state == SERVICE_RELOAD)) {
s->state == SERVICE_RUNNING ||
s->state == SERVICE_RELOAD)) {
+ _cleanup_bus_creds_unref_ sd_bus_creds *creds = NULL;
pid_t pid;
/* Try to acquire PID from bus service */
pid_t pid;
/* Try to acquire PID from bus service */
- r = sd_bus_get_owner_pid(u->manager->api_bus, name, &pid);
+ r = sd_bus_get_owner(u->manager->api_bus, name, SD_BUS_CREDS_PID, &creds);
+ if (r >= 0)
+ r = sd_bus_creds_get_pid(creds, &pid);
if (r >= 0) {
log_debug_unit(u->id, "%s's D-Bus name %s is now owned by process %u", u->id, name, (unsigned) pid);
if (r >= 0) {
log_debug_unit(u->id, "%s's D-Bus name %s is now owned by process %u", u->id, name, (unsigned) pid);
@@
-3716,7
+3709,6
@@
int service_set_socket_fd(Service *s, int fd, Socket *sock) {
return -EAGAIN;
s->socket_fd = fd;
return -EAGAIN;
s->socket_fd = fd;
- s->got_socket_fd = true;
unit_ref_set(&s->accept_socket, UNIT(sock));
unit_ref_set(&s->accept_socket, UNIT(sock));
@@
-3830,6
+3822,7
@@
const UnitVTable service_vtable = {
.exec_context_offset = offsetof(Service, exec_context),
.cgroup_context_offset = offsetof(Service, cgroup_context),
.kill_context_offset = offsetof(Service, kill_context),
.exec_context_offset = offsetof(Service, exec_context),
.cgroup_context_offset = offsetof(Service, cgroup_context),
.kill_context_offset = offsetof(Service, kill_context),
+ .exec_runtime_offset = offsetof(Service, exec_runtime),
.sections =
"Unit\0"
.sections =
"Unit\0"