summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-04-04 18:31:22 +0200
committerLennart Poettering <lennart@poettering.net>2013-04-04 18:31:22 +0200
commit667c24a6a86a5a26a906b7477ae81dcf4c73e64e (patch)
tree2a47196022087dbf16331ef89609084b705f3848 /src
parent60491a28698205d34a071f5e1a66f5a4e3621445 (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.sym1
-rw-r--r--src/login/sd-login.c18
-rw-r--r--src/login/test-login.c19
-rw-r--r--src/systemd/sd-login.h4
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