debian: Updates to fix lintian errors
[osmocom-bb.git] / src / write_queue.c
index 597fbe7..a592104 100644 (file)
  *
  */
 
-#include <osmocore/write_queue.h>
+#include <osmocom/core/write_queue.h>
 
-static int queue_cb(struct bsc_fd *fd, unsigned int what)
+int osmo_wqueue_bfd_cb(struct osmo_fd *fd, unsigned int what)
 {
-       struct write_queue *queue;
+       struct osmo_wqueue *queue;
 
-       queue = container_of(fd, struct write_queue, bfd);
+       queue = container_of(fd, struct osmo_wqueue, bfd);
 
        if (what & BSC_FD_READ)
                queue->read_cb(fd);
 
+       if (what & BSC_FD_EXCEPT)
+               queue->except_cb(fd);
+
        if (what & BSC_FD_WRITE) {
                struct msgb *msg;
 
                fd->when &= ~BSC_FD_WRITE;
-               msg = msgb_dequeue(&queue->msg_queue);
-               if (!msg)
-                       return -1;
 
-               --queue->current_length;
-               queue->write_cb(fd, msg);
-               msgb_free(msg);
+               /* the queue might have been emptied */
+               if (!llist_empty(&queue->msg_queue)) {
+                       --queue->current_length;
+
+                       msg = msgb_dequeue(&queue->msg_queue);
+                       queue->write_cb(fd, msg);
+                       msgb_free(msg);
 
-               if (!llist_empty(&queue->msg_queue))
-                       fd->when |= BSC_FD_WRITE;
+                       if (!llist_empty(&queue->msg_queue))
+                               fd->when |= BSC_FD_WRITE;
+               }
        }
 
        return 0;
 }
 
-void write_queue_init(struct write_queue *queue, int max_length)
+void osmo_wqueue_init(struct osmo_wqueue *queue, int max_length)
 {
        queue->max_length = max_length;
        queue->current_length = 0;
        queue->read_cb = NULL;
        queue->write_cb = NULL;
-       queue->bfd.cb = queue_cb;
+       queue->bfd.cb = osmo_wqueue_bfd_cb;
        INIT_LLIST_HEAD(&queue->msg_queue);
 }
 
-int write_queue_enqueue(struct write_queue *queue, struct msgb *data)
+int osmo_wqueue_enqueue(struct osmo_wqueue *queue, struct msgb *data)
 {
 //     if (queue->current_length + 1 >= queue->max_length)
 //             LOGP(DMSC, LOGL_ERROR, "The queue is full. Dropping not yet implemented.\n");
@@ -72,3 +77,14 @@ int write_queue_enqueue(struct write_queue *queue, struct msgb *data)
 
        return 0;
 }
+
+void osmo_wqueue_clear(struct osmo_wqueue *queue)
+{
+       while (!llist_empty(&queue->msg_queue)) {
+               struct msgb *msg = msgb_dequeue(&queue->msg_queue);
+               msgb_free(msg);
+       }
+
+       queue->current_length = 0;
+       queue->bfd.when &= ~BSC_FD_WRITE;
+}