Cleanup warnings
[lttng-ust.git] / libringbuffer / frontend_internal.h
index 02cb4d4a75d37c4b70f1f515be7fe5a1e18443d9..a6b96c1a098ab089199cbc9d06f59549bcc4328f 100644 (file)
@@ -376,7 +376,8 @@ void lib_ring_buffer_check_deliver(const struct lib_ring_buffer_config *config,
                         * RING_BUFFER_WAKEUP_BY_WRITER wakeup is not lock-free.
                         */
                        if (config->wakeup == RING_BUFFER_WAKEUP_BY_WRITER
-                           && uatomic_read(&buf->active_readers)
+                           && (uatomic_read(&buf->active_readers)
+                               || uatomic_read(&buf->active_shadow_readers))
                            && lib_ring_buffer_poll_deliver(config, buf, chan, handle)) {
                                int wakeup_fd = shm_get_wakeup_fd(handle, &buf->self._ref);
 
@@ -386,6 +387,20 @@ void lib_ring_buffer_check_deliver(const struct lib_ring_buffer_config *config,
                                         * Wake-up the other end by
                                         * writing a null byte in the
                                         * pipe (non-blocking).
+                                        * Important note: Because
+                                        * writing into the pipe is
+                                        * non-blocking (and therefore
+                                        * we allow dropping wakeup
+                                        * data, as long as there is
+                                        * wakeup data present in the
+                                        * pipe buffer to wake up the
+                                        * consumer), the consumer
+                                        * should perform the following
+                                        * sequence for waiting:
+                                        * 1) empty the pipe (reads).
+                                        * 2) check if there is data in
+                                        *    the buffer.
+                                        * 3) wait on the pipe (poll).
                                         */
                                        do {
                                                ret = write(wakeup_fd, "", 1);
This page took 0.023575 seconds and 4 git commands to generate.