configure: attempt to link against tcmalloc by default if available
[fio.git] / io_u_queue.h
index b702b1f..87de894 100644 (file)
@@ -2,12 +2,16 @@
 #define FIO_IO_U_QUEUE
 
 #include <assert.h>
+#include <stddef.h>
+
+#include "lib/types.h"
 
 struct io_u;
 
 struct io_u_queue {
        struct io_u **io_us;
        unsigned int nr;
+       unsigned int max;
 };
 
 static inline struct io_u *io_u_qpop(struct io_u_queue *q)
@@ -25,10 +29,15 @@ static inline struct io_u *io_u_qpop(struct io_u_queue *q)
 
 static inline void io_u_qpush(struct io_u_queue *q, struct io_u *io_u)
 {
-       q->io_us[q->nr++] = io_u;
+       if (q->nr < q->max) {
+               q->io_us[q->nr++] = io_u;
+               return;
+       }
+
+       assert(0);
 }
 
-static inline int io_u_qempty(struct io_u_queue *q)
+static inline int io_u_qempty(const struct io_u_queue *q)
 {
        return !q->nr;
 }
@@ -36,8 +45,8 @@ static inline int io_u_qempty(struct io_u_queue *q)
 #define io_u_qiter(q, io_u, i) \
        for (i = 0; i < (q)->nr && (io_u = (q)->io_us[i]); i++)
 
-int io_u_qinit(struct io_u_queue *q, unsigned int nr);
-void io_u_qexit(struct io_u_queue *q);
+bool io_u_qinit(struct io_u_queue *q, unsigned int nr, bool shared);
+void io_u_qexit(struct io_u_queue *q, bool shared);
 
 struct io_u_ring {
        unsigned int head;
@@ -46,7 +55,7 @@ struct io_u_ring {
        struct io_u **ring;
 };
 
-int io_u_rinit(struct io_u_ring *ring, unsigned int nr);
+bool io_u_rinit(struct io_u_ring *ring, unsigned int nr);
 void io_u_rexit(struct io_u_ring *ring);
 
 static inline void io_u_rpush(struct io_u_ring *r, struct io_u *io_u)