On Wed, Mar 18, 2009 at 10:36:17PM -0700, yyzhuang wrote:
>
> Hi Eric,
>
> We read through the code. gr_buffer is a circular/ring buffer, so when
> reading/writing through it, we need to take modular into account. The assert
> error, it's line 125 in gr_buffer.h
> (gnuradio/gnuradio-core/src/lib/runtime/gr_buffer.h):
>
> unsigned
> index_add (unsigned a, unsigned b)
> {
> unsigned s = a + b;
>
> if (s >= d_bufsize)
> s -= d_bufsize;
>
> assert (s < d_bufsize);
> return s;
> }
>
> It is invoked by
>
> void
> gr_buffer::update_write_pointer (int nitems)
> {
> scoped_lock guard(*mutex());
> d_write_index = index_add (d_write_index, nitems);
> }
>
> void
> gr_buffer_reader::update_read_pointer (int nitems)
> {
> scoped_lock guard(*mutex());
> d_read_index = d_buffer->index_add (d_read_index, nitems);
> }
>
> I think it wants to add d_write_index or d_read_index by nitems. But when
> arrival rate is higher than service rate, buffer overflow occurs. Do you
> know how to increase the buffer size? Thanks.
The problem is most likely not in this code, but in a gr_block that is
misbehaving. Increasing the buffer size will not fundamentally alter
the behavior.
Eric
_______________________________________________
Discuss-gnuradio mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/discuss-gnuradio