From 19ab4e9c58ddae57cfd25a8452fca28a6fc5bea1 Mon Sep 17 00:00:00 2001 From: Pavel Pisa Date: Mon, 26 Nov 2012 19:02:15 +0100 Subject: [PATCH] Zero count of consumers/tail readers of CBUFF is handled now. The CBUFF semantic is changed so that the first (re-)attached reader is supplied by all messages held in buffer during time when no reader is attached. Signed-off-by: Pavel Pisa --- ulut/ul_cbuff.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ulut/ul_cbuff.h b/ulut/ul_cbuff.h index e9a74e3..a6fd8d8 100644 --- a/ulut/ul_cbuff.h +++ b/ulut/ul_cbuff.h @@ -189,6 +189,8 @@ ul_cbuff_head_alloc(ul_cbuff_t *buff, ul_cbuff_put_info_t *put_info, unsigned in put_info->msg_head->flags|=flags; if(buff->state->readers>0) put_info->msg_head->flags+=buff->state->readers; + else if (buff->state->readers==0) + put_info->msg_head->flags+=1; put_info->msg_head->length=length; @@ -262,7 +264,10 @@ ul_cbuff_tail_attach(ul_cbuff_t *buff, ul_cbuff_tail_info_t *tail_info, int mode ul_cbuff_state_t *state=buff->state; ul_cbuff_msg_head_t *msg_head; - msg_head=(ul_cbuff_msg_head_t *)(buff->buff_start+state->head); + if(state->readers>0) + msg_head=(ul_cbuff_msg_head_t *)(buff->buff_start+state->head); + else if(state->readers==0) + msg_head=(ul_cbuff_msg_head_t *)(buff->buff_start+state->lasttail); if(state->readers>=0) state->readers++; tail_info->msg_head=msg_head; -- 2.39.2