From 7f5f7dec4480cd7b2fe17b89f32890324250f0f0 Mon Sep 17 00:00:00 2001 From: sletz Date: Thu, 27 Nov 2008 12:01:17 +0000 Subject: [PATCH] Report ringbuffer.c fixes from jack1. Fix for ticket #102. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@3126 0c269be4-1314-0410-8aa9-9f06e86f4224 --- ChangeLog | 6 +++++- common/ringbuffer.c | 25 +++++++++---------------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index bbdcb4a2..7486b0a2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -23,7 +23,11 @@ Michael Voigt Jackdmp changes log --------------------------- -2008-11-31 Stephane Letz +2008-11-27 Stephane Letz + + * Report ringbuffer.c fixes from jack1. + +2008-11-21 Stephane Letz * Better isolation of server and clients system resources to allow starting the server in several user account at the same time. diff --git a/common/ringbuffer.c b/common/ringbuffer.c index d938ef2d..1018241a 100644 --- a/common/ringbuffer.c +++ b/common/ringbuffer.c @@ -193,13 +193,11 @@ jack_ringbuffer_read (jack_ringbuffer_t * rb, char *dest, size_t cnt) } memcpy (dest, &(rb->buf[rb->read_ptr]), n1); - rb->read_ptr += n1; - rb->read_ptr &= rb->size_mask; + rb->read_ptr = (rb->read_ptr + n1) & rb->size_mask; if (n2) { memcpy (dest + n1, &(rb->buf[rb->read_ptr]), n2); - rb->read_ptr += n2; - rb->read_ptr &= rb->size_mask; + rb->read_ptr = (rb->read_ptr + n2) & rb->size_mask; } return to_read; @@ -237,13 +235,10 @@ jack_ringbuffer_peek (jack_ringbuffer_t * rb, char *dest, size_t cnt) } memcpy (dest, &(rb->buf[tmp_read_ptr]), n1); - tmp_read_ptr += n1; - tmp_read_ptr &= rb->size_mask; + tmp_read_ptr = (tmp_read_ptr + n1) & rb->size_mask; if (n2) { memcpy (dest + n1, &(rb->buf[tmp_read_ptr]), n2); - tmp_read_ptr += n2; - tmp_read_ptr &= rb->size_mask; } return to_read; @@ -277,13 +272,11 @@ jack_ringbuffer_write (jack_ringbuffer_t * rb, const char *src, size_t cnt) } memcpy (&(rb->buf[rb->write_ptr]), src, n1); - rb->write_ptr += n1; - rb->write_ptr &= rb->size_mask; + rb->write_ptr = (rb->write_ptr + n1) & rb->size_mask; if (n2) { memcpy (&(rb->buf[rb->write_ptr]), src + n1, n2); - rb->write_ptr += n2; - rb->write_ptr &= rb->size_mask; + rb->write_ptr = (rb->write_ptr + n2) & rb->size_mask; } return to_write; @@ -294,8 +287,8 @@ jack_ringbuffer_write (jack_ringbuffer_t * rb, const char *src, size_t cnt) EXPORT void jack_ringbuffer_read_advance (jack_ringbuffer_t * rb, size_t cnt) { - rb->read_ptr += cnt; - rb->read_ptr &= rb->size_mask; + size_t tmp = (rb->read_ptr + cnt) & rb->size_mask; + rb->read_ptr = tmp; } /* Advance the write pointer `cnt' places. */ @@ -303,8 +296,8 @@ jack_ringbuffer_read_advance (jack_ringbuffer_t * rb, size_t cnt) EXPORT void jack_ringbuffer_write_advance (jack_ringbuffer_t * rb, size_t cnt) { - rb->write_ptr += cnt; - rb->write_ptr &= rb->size_mask; + size_t tmp = (rb->write_ptr + cnt) & rb->size_mask; + rb->write_ptr = tmp; } /* The non-copying data reader. `vec' is an array of two places. Set