diff options
| -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;  | 
