Expose enqueue/dequeue file descriptors for fixed_queue.

These file descriptors can be used with a reactor to perform
non-blocking enqueue/dequeue operations.

Change-Id: If75730f9093e8d20a789a7bd2bde92e019922e5a
diff --git a/osi/include/fixed_queue.h b/osi/include/fixed_queue.h
index da19c28..a3b896c 100644
--- a/osi/include/fixed_queue.h
+++ b/osi/include/fixed_queue.h
@@ -56,3 +56,17 @@
 // Otherwise, the next element in the queue is returned. |queue| may not be
 // NULL.
 void *fixed_queue_try_dequeue(fixed_queue_t *queue);
+
+// This function returns a valid file descriptor. Callers may perform one
+// operation on the fd: select(2). If |select| indicates that the file
+// descriptor is readable, the caller may call |fixed_queue_enqueue| without
+// blocking. The caller must not close the returned file descriptor. |queue|
+// may not be NULL.
+int fixed_queue_get_enqueue_fd(const fixed_queue_t *queue);
+
+// This function returns a valid file descriptor. Callers may perform one
+// operation on the fd: select(2). If |select| indicates that the file
+// descriptor is readable, the caller may call |fixed_queue_dequeue| without
+// blocking. The caller must not close the returned file descriptor. |queue|
+// may not be NULL.
+int fixed_queue_get_dequeue_fd(const fixed_queue_t *queue);