Fix: lttng_poll_mod calls compat_(e)poll_add
[lttng-tools.git] / src / common / compat / compat-poll.c
index cc280c7640ce4d011904da27fac43712ce1df272..b45b39dc6bdbd45daf69944316b1d663f1744867 100644 (file)
@@ -20,6 +20,7 @@
 #include <stdlib.h>
 #include <sys/resource.h>
 #include <sys/time.h>
+#include <stdbool.h>
 
 #include <common/defaults.h>
 #include <common/error.h>
@@ -111,8 +112,9 @@ int compat_poll_create(struct lttng_poll_event *events, int size)
        }
 
        if (!poll_max_size) {
-               ERR("poll_max_size not initialized yet");
-               goto error;
+               if (lttng_poll_set_max_size()) {
+                       goto error;
+               }
        }
 
        /* Don't bust the limit here */
@@ -195,6 +197,42 @@ error:
        return -1;
 }
 
+/*
+ * Modify an fd's events..
+ */
+int compat_poll_mod(struct lttng_poll_event *events, int fd,
+               uint32_t req_events)
+{
+       int i;
+       bool fd_found = false;
+       struct compat_poll_event_array *current;
+
+       if (events == NULL || events->current.events == NULL || fd < 0) {
+               ERR("Bad compat poll mod arguments");
+               goto error;
+       }
+
+       current = &events->current;
+
+       for (i = 0; i < current->nb_fd; i++) {
+               if (current->events[i].fd == fd) {
+                       fd_found = true;
+                       current->events[i].events = req_events;
+                       events->need_update = 1;
+                       break;
+               }
+       }
+
+       if (!fd_found) {
+               goto error;
+       }
+
+       return 0;
+
+error:
+       return -1;
+}
+
 /*
  * Remove a fd from the pollfd structure.
  */
This page took 0.024177 seconds and 4 git commands to generate.