Mercurial > hg > svcore
diff base/RingBuffer.h @ 575:8688430850d6
* either I'm going mad or the compiler is... valgrind and sizeof both
seem to think that reading or writing m_size is reading beyond the end
of the object, unless I add m_spare padding... why?
author | Chris Cannam |
---|---|
date | Mon, 16 Mar 2009 16:32:02 +0000 |
parents | 2d551c765d51 |
children | 2ba202c5be8d |
line wrap: on
line diff
--- a/base/RingBuffer.h Mon Mar 16 13:56:11 2009 +0000 +++ b/base/RingBuffer.h Mon Mar 16 16:32:02 2009 +0000 @@ -165,6 +165,7 @@ size_t m_writer; size_t *m_readers; size_t m_size; + size_t m_spare; static Scavenger<ScavengerArrayWrapper<T> > m_scavenger; @@ -187,9 +188,16 @@ #ifdef DEBUG_RINGBUFFER std::cerr << "RingBuffer<T," << N << ">[" << this << "]::RingBuffer(" << n << ")" << std::endl; #endif +/* + std::cerr << "note: sizeof(RingBuffer<T,N> = " << sizeof(RingBuffer<T,N>) << ")" << std::endl; - std::cerr << "note: sizeof(RingBuffer<T,N> = " << sizeof(RingBuffer<T,N>) << std::endl; - + std::cerr << "this = " << this << std::endl; + std::cerr << "&m_buffer = " << &m_buffer << std::endl; + std::cerr << "&m_mlocked = " << &m_mlocked << std::endl; + std::cerr << "&m_writer = " << &m_writer << std::endl; + std::cerr << "&m_readers = " << &m_readers << std::endl; + std::cerr << "&m_size = " << &m_size << std::endl; +*/ for (int i = 0; i < N; ++i) m_readers[i] = 0; m_scavenger.scavenge();