diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/write_queue.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/write_queue.c b/src/write_queue.c index 618a8c0b..7295569a 100644 --- a/src/write_queue.c +++ b/src/write_queue.c @@ -39,16 +39,18 @@ int write_queue_bfd_cb(struct bsc_fd *fd, unsigned int what) 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; |