]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-event: add sd_event_source_{get,set}_floating()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 3 Nov 2018 16:55:28 +0000 (01:55 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 5 Nov 2018 04:19:02 +0000 (13:19 +0900)
src/libsystemd/libsystemd.sym
src/libsystemd/sd-event/sd-event.c
src/systemd/sd-event.h

index 8d46081ec4036c6f170ce4b32134e820d42facca..1f2238ca37eb5470866e167e06dcc123c8da32ce 100644 (file)
@@ -663,4 +663,7 @@ global:
         sd_device_monitor_filter_add_match_tag;
         sd_device_monitor_filter_update;
         sd_device_monitor_filter_remove;
+
+        sd_event_source_get_floating;
+        sd_event_source_set_floating;
 } LIBSYSTEMD_239;
index f44e6b4cca7a6f2c0f91eab152189747fc0ad713..27caa8681cd7765e9f0ea576681fa40083c79e8e 100644 (file)
@@ -3702,3 +3702,31 @@ _public_ int sd_event_source_get_destroy_callback(sd_event_source *s, sd_event_d
 
         return !!s->destroy_callback;
 }
+
+_public_ int sd_event_source_get_floating(sd_event_source *s) {
+        assert_return(s, -EINVAL);
+
+        return s->floating;
+}
+
+_public_ int sd_event_source_set_floating(sd_event_source *s, int b) {
+        assert_return(s, -EINVAL);
+
+        if (s->floating == !!b)
+                return 0;
+
+        if (!s->event) /* Already disconnected */
+                return -ESTALE;
+
+        s->floating = b;
+
+        if (b) {
+                sd_event_source_ref(s);
+                sd_event_unref(s->event);
+        } else {
+                sd_event_ref(s->event);
+                sd_event_source_unref(s);
+        }
+
+        return 1;
+}
index c38eb84beb897d849c7317152ff0e81b0dfc5d8d..b15cade20a521d9e15be012273e0be28c159edff 100644 (file)
@@ -143,6 +143,8 @@ int sd_event_source_get_child_pid(sd_event_source *s, pid_t *pid);
 int sd_event_source_get_inotify_mask(sd_event_source *s, uint32_t *ret);
 int sd_event_source_set_destroy_callback(sd_event_source *s, sd_event_destroy_t callback);
 int sd_event_source_get_destroy_callback(sd_event_source *s, sd_event_destroy_t *ret);
+int sd_event_source_get_floating(sd_event_source *s);
+int sd_event_source_set_floating(sd_event_source *s, int b);
 
 /* Define helpers so that __attribute__((cleanup(sd_event_unrefp))) and similar may be used. */
 _SD_DEFINE_POINTER_CLEANUP_FUNC(sd_event, sd_event_unref);