diff options
author | Lennart Poettering <lennart@poettering.net> | 2013-04-04 18:31:22 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-04-04 18:31:22 +0200 |
commit | 667c24a6a86a5a26a906b7477ae81dcf4c73e64e (patch) | |
tree | 2a47196022087dbf16331ef89609084b705f3848 /src | |
parent | 60491a28698205d34a071f5e1a66f5a4e3621445 (diff) |
login: add sd_login_monitor_get_timeout() public api call
We don't need this right now, but we should keep our options open, in
case we need more than just an fd for waking up.
Diffstat (limited to 'src')
-rw-r--r-- | src/login/libsystemd-login.sym | 1 | ||||
-rw-r--r-- | src/login/sd-login.c | 18 | ||||
-rw-r--r-- | src/login/test-login.c | 19 | ||||
-rw-r--r-- | src/systemd/sd-login.h | 4 |
4 files changed, 38 insertions, 4 deletions
diff --git a/src/login/libsystemd-login.sym b/src/login/libsystemd-login.sym index 55a828773b..ce2304a1ba 100644 --- a/src/login/libsystemd-login.sym +++ b/src/login/libsystemd-login.sym @@ -62,4 +62,5 @@ global: LIBSYSTEMD_LOGIN_201 { global: sd_login_monitor_get_events; + sd_login_monitor_get_timeout; } LIBSYSTEMD_LOGIN_198; diff --git a/src/login/sd-login.c b/src/login/sd-login.c index 861a57166d..7513f76cb3 100644 --- a/src/login/sd-login.c +++ b/src/login/sd-login.c @@ -804,5 +804,23 @@ _public_ int sd_login_monitor_get_events(sd_login_monitor *m) { if (!m) return -EINVAL; + /* For now we will only return POLLIN here, since we don't + * need anything else ever for inotify. However, let's have + * this API to keep our options open should we later on need + * it. */ return POLLIN; } + +_public_ int sd_login_monitor_get_timeout(sd_login_monitor *m, uint64_t *timeout_usec) { + + if (!m) + return -EINVAL; + if (!timeout_usec) + return -EINVAL; + + /* For now we will only return (uint64_t) -1, since we don't + * need any timeout. However, let's have this API to keep our + * options open should we later on need it. */ + *timeout_usec = (uint64_t) -1; + return 0; +} diff --git a/src/login/test-login.c b/src/login/test-login.c index f639129636..e4d0c93378 100644 --- a/src/login/test-login.c +++ b/src/login/test-login.c @@ -183,12 +183,23 @@ int main(int argc, char* argv[]) { r = sd_login_monitor_new("session", &m); assert_se(r >= 0); - zero(pollfd); - pollfd.fd = sd_login_monitor_get_fd(m); - pollfd.events = sd_login_monitor_get_events(m); for (n = 0; n < 5; n++) { - r = poll(&pollfd, 1, -1); + usec_t timeout, nw; + + zero(pollfd); + assert_se((pollfd.fd = sd_login_monitor_get_fd(m)) >= 0); + assert_se((pollfd.events = sd_login_monitor_get_events(m)) >= 0); + + assert_se(sd_login_monitor_get_timeout(m, &timeout) >= 0); + + nw = now(CLOCK_MONOTONIC); + + r = poll(&pollfd, 1, + timeout == (uint64_t) -1 ? -1 : + timeout > nw ? (int) ((timeout - nw) / 1000) : + 0); + assert_se(r >= 0); sd_login_monitor_flush(m); diff --git a/src/systemd/sd-login.h b/src/systemd/sd-login.h index 57255bd4a9..d05424dbf3 100644 --- a/src/systemd/sd-login.h +++ b/src/systemd/sd-login.h @@ -23,6 +23,7 @@ ***/ #include <sys/types.h> +#include <inttypes.h> #ifdef __cplusplus extern "C" { @@ -159,6 +160,9 @@ int sd_login_monitor_get_fd(sd_login_monitor *m); /* Get poll() mask to monitor */ int sd_login_monitor_get_events(sd_login_monitor *m); +/* Get timeout for poll(), as usec value relative to CLOCK_MONOTONIC's epoch */ +int sd_login_monitor_get_timeout(sd_login_monitor *m, uint64_t *timeout_usec); + #ifdef __cplusplus } #endif |