diff --git a/man/rules/meson.build b/man/rules/meson.build
index 0fb7978c21..e1e2c5e60d 100644
--- a/man/rules/meson.build
+++ b/man/rules/meson.build
@@ -263,6 +263,10 @@ manpages = [
'3',
['sd_event_add_exit', 'sd_event_add_post', 'sd_event_handler_t'],
''],
+ ['sd_event_add_inotify',
+ '3',
+ ['sd_event_inotify_handler_t', 'sd_event_source_get_inotify_mask'],
+ ''],
['sd_event_add_io',
'3',
['sd_event_io_handler_t',
diff --git a/man/sd-event.xml b/man/sd-event.xml
index 59f933526a..ecaa2753a3 100644
--- a/man/sd-event.xml
+++ b/man/sd-event.xml
@@ -62,6 +62,7 @@
sd_event_add_time3,
sd_event_add_signal3,
sd_event_add_child3,
+ sd_event_add_inotify3,
sd_event_add_defer3,
sd_event_source_unref3,
sd_event_source_set_priority3,
@@ -152,6 +153,7 @@
sd_event_add_time3,
sd_event_add_signal3,
sd_event_add_child3,
+ sd_event_add_inotify3,
sd_event_add_defer3,
sd_event_source_unref3,
sd_event_source_set_priority3,
diff --git a/man/sd_event_add_child.xml b/man/sd_event_add_child.xml
index d3a90ea05e..43c44ab3a3 100644
--- a/man/sd_event_add_child.xml
+++ b/man/sd_event_add_child.xml
@@ -223,6 +223,7 @@
sd_event_add_io3,
sd_event_add_time3,
sd_event_add_signal3,
+ sd_event_add_inotify3,
sd_event_add_defer3,
sd_event_source_set_enabled3,
sd_event_source_set_priority3,
diff --git a/man/sd_event_add_defer.xml b/man/sd_event_add_defer.xml
index 0276443105..54570afdb5 100644
--- a/man/sd_event_add_defer.xml
+++ b/man/sd_event_add_defer.xml
@@ -194,6 +194,7 @@
sd_event_add_time3,
sd_event_add_signal3,
sd_event_add_child3,
+ sd_event_add_inotify3,
sd_event_source_set_enabled3,
sd_event_source_set_priority3,
sd_event_source_set_userdata3,
diff --git a/man/sd_event_add_inotify.xml b/man/sd_event_add_inotify.xml
new file mode 100644
index 0000000000..af3b6bcfdf
--- /dev/null
+++ b/man/sd_event_add_inotify.xml
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+
+ sd_event_add_inotify
+ systemd
+
+
+
+ sd_event_add_inotify
+ 3
+
+
+
+ sd_event_add_inotify
+ sd_event_source_get_inotify_mask
+ sd_event_inotify_handler_t
+
+ Add an "inotify" file system inode event source to an event loop
+
+
+
+
+ #include <systemd/sd-event.h>
+
+ typedef struct sd_event_source sd_event_source;
+
+
+ typedef int (*sd_event_inotify_handler_t)
+ sd_event_source *s
+ const struct inotify_event *event
+ void *userdata
+
+
+
+ int sd_event_add_inotify
+ sd_event *event
+ sd_event_source **source
+ const char *path
+ uint32_t mask
+ sd_event_inotify_handler_t handler
+ void *userdata
+
+
+
+ int sd_event_source_get_inotify_mask
+ sd_event_source *source
+ uint32_t *mask
+
+
+
+
+
+
+ Description
+
+ sd_event_add_inotify() adds a new inotify7 file system inode
+ event source to an event loop. The event loop object is specified in the event parameter,
+ the event source object is returned in the source parameter. The path
+ parameter specifies the path of the file system inode to watch. The handler must reference a
+ function to call when the inode changes. The handler function will be passed the userdata
+ pointer, which may be chosen freely by the caller. The handler also receives a pointer to a struct
+ inotify_event structure containing information about the inode event. The mask
+ parameter specifie which types of inode events to watch specifically. It must contain an OR-ed combination of
+ IN_ACCESS, IN_ATTRIB, IN_CLOSE_WRITE, … flags. See
+ inotify7 for
+ further information.
+
+ If multiple event sources are installed for the same inode the backing inotify watch descriptor is
+ automatically shared. The mask parameter may contain any flag defined by the inotify API, with the exception of
+ IN_MASK_ADD.
+
+ The handler is enabled continuously (SD_EVENT_ON), but this may be changed with
+ sd_event_source_set_enabled3. Alternatively,
+ the IN_ONESHOT mask flag may be used to request SD_EVENT_ONESHOT mode.
+ If the handler function returns a negative error code, it will be disabled after the invocation, even if the
+ SD_EVENT_ON mode was requested before.
+
+
+ As a special limitation the priority of inotify event sources may only be altered (see
+ sd_event_source_set_priority3)
+ in the time between creation of the event source object with sd_event_add_inotify() and the
+ beginning of the next event loop iteration. Attempts of changing the priority any later will be refused. Consider
+ freeing and allocating a new inotify event source to change the priority at that point.
+
+ To destroy an event source object use
+ sd_event_source_unref3, but note
+ that the event source is only removed from the event loop when all references to the event source are dropped. To
+ make sure an event source does not fire anymore, even when there's still a reference to it kept, consider disabling
+ it with
+ sd_event_source_set_enabled3.
+
+ If the second parameter of sd_event_add_inotify() is passed as NULL no reference to the
+ event source object is returned. In this case the event source is considered "floating", and will be destroyed
+ implicitly when the event loop itself is destroyed.
+
+ sd_event_source_get_inotify_mask() retrieves the configured inotify watch mask of an
+ event source created previously with sd_event_add_inotify(). It takes the event source object
+ as the source parameter and a pointer to a uint32_t variable to return the mask
+ in.
+
+
+
+ Return Value
+
+ On success, these functions return 0 or a positive integer. On failure, they return a negative errno-style
+ error code.
+
+
+
+ Errors
+
+ Returned errors may indicate the following problems:
+
+
+
+ -ENOMEM
+
+ Not enough memory to allocate an object.
+
+
+
+ -EINVAL
+
+ An invalid argument has been passed. This includes specifying a mask with
+ IN_MASK_ADD set.
+
+
+
+ -ESTALE
+
+ The event loop is already terminated.
+
+
+
+
+ -ECHILD
+
+ The event loop has been created in a different process.
+
+
+
+
+ -EDOM
+
+ The passed event source is not an inotify process event source.
+
+
+
+
+
+
+
+
+ See Also
+
+
+ systemd1,
+ sd-event3,
+ sd_event_new3,
+ sd_event_now3,
+ sd_event_add_io3,
+ sd_event_add_time3,
+ sd_event_add_signal3,
+ sd_event_add_defer3,
+ sd_event_add_child3,
+ sd_event_source_set_enabled3,
+ sd_event_source_set_priority3,
+ sd_event_source_set_userdata3,
+ sd_event_source_set_description3,
+ waitid2
+
+
+
+
diff --git a/man/sd_event_add_io.xml b/man/sd_event_add_io.xml
index 1841e3d66f..d5ef462e53 100644
--- a/man/sd_event_add_io.xml
+++ b/man/sd_event_add_io.xml
@@ -275,6 +275,7 @@
sd_event_add_time3,
sd_event_add_signal3,
sd_event_add_child3,
+ sd_event_add_inotify3,
sd_event_add_defer3,
sd_event_source_set_enabled3,
sd_event_source_set_priority3,
diff --git a/man/sd_event_add_signal.xml b/man/sd_event_add_signal.xml
index cc132ffffc..74f0191bc4 100644
--- a/man/sd_event_add_signal.xml
+++ b/man/sd_event_add_signal.xml
@@ -198,6 +198,7 @@
sd_event_add_io3,
sd_event_add_time3,
sd_event_add_child3,
+ sd_event_add_inotify3,
sd_event_add_defer3,
sd_event_source_set_enabled3,
sd_event_source_set_description3,
diff --git a/man/sd_event_add_time.xml b/man/sd_event_add_time.xml
index 121b64301c..9015315105 100644
--- a/man/sd_event_add_time.xml
+++ b/man/sd_event_add_time.xml
@@ -288,6 +288,7 @@
sd_event_add_io3,
sd_event_add_signal3,
sd_event_add_child3,
+ sd_event_add_inotify3,
sd_event_add_defer3,
sd_event_source_set_enabled3,
sd_event_source_set_priority3,
diff --git a/man/sd_event_source_set_priority.xml b/man/sd_event_source_set_priority.xml
index 60fe7e3b2b..0bc6be9cb9 100644
--- a/man/sd_event_source_set_priority.xml
+++ b/man/sd_event_source_set_priority.xml
@@ -108,6 +108,12 @@
particular event sources do not starve or dominate the event
loop.
+ The priority of event sources may be changed at any time of their lifetime, with the exception of inotify
+ event sources (i.e. those created with
+ sd_event_add_inotify3) whose
+ priority may only be changed in the time between their initial creation and the first subsequent event loop
+ iteration.
+
sd_event_source_get_priority() may be
used to query the current priority assigned to the event source
object source.