From: Lennart Poettering Date: Mon, 11 Dec 2017 19:01:55 +0000 (+0100) Subject: basic: turn off stdio locking for a couple of helper calls X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=3e57e6c7203e7a659bb4b3cca3bc7383488787a2;p=elogind.git basic: turn off stdio locking for a couple of helper calls These helper calls are potentially called often, and allocate FILE* objects internally for a very short period of time, let's turn off locking for them too. --- diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c index 79635cfe9..050e04263 100644 --- a/src/basic/cgroup-util.c +++ b/src/basic/cgroup-util.c @@ -1504,7 +1504,7 @@ static bool valid_slice_name(const char *p, size_t n) { if (!p) return false; - if (n < STRLEN("x.slice")) + if (n < strlen("x.slice")) return false; if (memcmp(p + n - 6, ".slice", 6) == 0) { @@ -1588,7 +1588,7 @@ static const char *skip_session(const char *p) { p += strspn(p, "/"); n = strcspn(p, "/"); - if (n < STRLEN("session-x.scope")) + if (n < strlen("session-x.scope")) return NULL; if (memcmp(p, "session-", 8) == 0 && memcmp(p + n - 6, ".scope", 6) == 0) { @@ -1625,7 +1625,7 @@ static const char *skip_user_manager(const char *p) { p += strspn(p, "/"); n = strcspn(p, "/"); - if (n < STRLEN("user@x.service")) + if (n < strlen("user@x.service")) return NULL; if (memcmp(p, "user@", 5) == 0 && memcmp(p + n - 8, ".service", 8) == 0) { @@ -2558,13 +2558,13 @@ static int cg_unified_update(void) { unified_cache = CGROUP_UNIFIED_ALL; #if 0 /// The handling of cgroups is a bit different with elogind } else if (F_TYPE_EQUAL(fs.f_type, TMPFS_MAGIC)) { + log_debug("Found cgroup2 on /sys/fs/cgroup/unified, unified hierarchy for systemd controller"); #else } else if (F_TYPE_EQUAL(fs.f_type, CGROUP_SUPER_MAGIC) || F_TYPE_EQUAL(fs.f_type, TMPFS_MAGIC)) { #endif // 0 if (statfs("/sys/fs/cgroup/unified/", &fs) == 0 && F_TYPE_EQUAL(fs.f_type, CGROUP2_SUPER_MAGIC)) { - log_debug("Found cgroup2 on /sys/fs/cgroup/unified, unified hierarchy for elogind controller"); unified_cache = CGROUP_UNIFIED_SYSTEMD; unified_systemd_v232 = false; } else { diff --git a/src/basic/fileio.c b/src/basic/fileio.c index 5a918c1e7..0b3527de7 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -1483,7 +1483,7 @@ int link_tmpfile(int fd, const char *path, const char *target) { if (rename_noreplace(AT_FDCWD, path, AT_FDCWD, target) < 0) return -errno; } else { - char proc_fd_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(fd) + 1]; + char proc_fd_path[strlen("/proc/self/fd/") + DECIMAL_STR_MAX(fd) + 1]; xsprintf(proc_fd_path, "/proc/self/fd/%i", fd); diff --git a/src/basic/mount-util.c b/src/basic/mount-util.c index 03e1b9a42..d2cc70d5c 100644 --- a/src/basic/mount-util.c +++ b/src/basic/mount-util.c @@ -116,7 +116,7 @@ int name_to_handle_at_loop( } static int fd_fdinfo_mnt_id(int fd, const char *filename, int flags, int *mnt_id) { - char path[STRLEN("/proc/self/fdinfo/") + DECIMAL_STR_MAX(int)]; + char path[strlen("/proc/self/fdinfo/") + DECIMAL_STR_MAX(int)]; _cleanup_free_ char *fdinfo = NULL; _cleanup_close_ int subfd = -1; char *p; diff --git a/src/basic/process-util.c b/src/basic/process-util.c index 1c77195e8..611fd2339 100644 --- a/src/basic/process-util.c +++ b/src/basic/process-util.c @@ -715,67 +715,6 @@ int wait_for_terminate_and_warn(const char *name, pid_t pid, bool check_exit_cod } #if 0 /// UNNEEDED by elogind -/* - * Return values: - * < 0 : wait_for_terminate_with_timeout() failed to get the state of the - * process, the process timed out, the process was terminated by a - * signal, or failed for an unknown reason. - * >=0 : The process terminated normally with no failures. - * - * Success is indicated by a return value of zero, a timeout is indicated - * by ETIMEDOUT, and all other child failure states are indicated by error - * is indicated by a non-zero value. - */ -int wait_for_terminate_with_timeout(pid_t pid, usec_t timeout) { - sigset_t mask; - int r; - usec_t until; - - assert_se(sigemptyset(&mask) == 0); - assert_se(sigaddset(&mask, SIGCHLD) == 0); - - /* Drop into a sigtimewait-based timeout. Waiting for the - * pid to exit. */ - until = now(CLOCK_MONOTONIC) + timeout; - for (;;) { - usec_t n; - siginfo_t status = {}; - struct timespec ts; - - n = now(CLOCK_MONOTONIC); - if (n >= until) - break; - - r = sigtimedwait(&mask, NULL, timespec_store(&ts, until - n)) < 0 ? -errno : 0; - /* Assuming we woke due to the child exiting. */ - if (waitid(P_PID, pid, &status, WEXITED|WNOHANG) == 0) { - if (status.si_pid == pid) { - /* This is the correct child.*/ - if (status.si_code == CLD_EXITED) - return (status.si_status == 0) ? 0 : -EPROTO; - else - return -EPROTO; - } - } - /* Not the child, check for errors and proceed appropriately */ - if (r < 0) { - switch (r) { - case -EAGAIN: - /* Timed out, child is likely hung. */ - return -ETIMEDOUT; - case -EINTR: - /* Received a different signal and should retry */ - continue; - default: - /* Return any unexpected errors */ - return r; - } - } - } - - return -EPROTO; -} - void sigkill_wait(pid_t pid) { assert(pid > 1);