[Boost-bugs] [Boost C++ Libraries] #8395: Valgrind error in lockfree::queue

Subject: [Boost-bugs] [Boost C++ Libraries] #8395: Valgrind error in lockfree::queue
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2013-04-04 17:19:22


#8395: Valgrind error in lockfree::queue
------------------------------+---------------------------------------------
 Reporter: adam@… | Owner: timblechmann
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: lockfree
  Version: Boost 1.53.0 | Severity: Problem
 Keywords: |
------------------------------+---------------------------------------------
 The following code


 {{{
 #include <boost/lockfree/queue.hpp>

 int main()
 {
         int i = 0;
         boost::lockfree::queue<int*> q(128);

         q.push(&i);
         q.push(&i);

         return 0;
 }
 }}}

 compiled with

 {{{
 g++ -o test test.cpp -I/opt/boost/include
 }}}

 produces the following valgrind output

 {{{
 ==32040== Memcheck, a memory error detector
 ==32040== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
 ==32040== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright
 info
 ==32040== Command: ./test
 ==32040==
 ==32040== Conditional jump or move depends on uninitialised value(s)
 ==32040== at 0x401E77:
 boost::atomics::detail::base_atomic<boost::lockfree::detail::tagged_ptr<boost::lockfree::queue<int*,
 boost::parameter::void_, boost::parameter::void_,
 boost::parameter::void_>::node>, void, 8u,
 false>::compare_exchange_strong(boost::lockfree::detail::tagged_ptr<boost::lockfree::queue<int*,
 boost::parameter::void_, boost::parameter::void_,
 boost::parameter::void_>::node>&,
 boost::lockfree::detail::tagged_ptr<boost::lockfree::queue<int*,
 boost::parameter::void_, boost::parameter::void_,
 boost::parameter::void_>::node> const&, boost::memory_order,
 boost::memory_order) volatile (in /tmp/test)
 ==32040== by 0x401DD9:
 boost::atomics::detail::base_atomic<boost::lockfree::detail::tagged_ptr<boost::lockfree::queue<int*,
 boost::parameter::void_, boost::parameter::void_,
 boost::parameter::void_>::node>, void, 8u,
 false>::compare_exchange_weak(boost::lockfree::detail::tagged_ptr<boost::lockfree::queue<int*,
 boost::parameter::void_, boost::parameter::void_,
 boost::parameter::void_>::node>&,
 boost::lockfree::detail::tagged_ptr<boost::lockfree::queue<int*,
 boost::parameter::void_, boost::parameter::void_,
 boost::parameter::void_>::node> const&, boost::memory_order,
 boost::memory_order) volatile (in /tmp/test)
 ==32040== by 0x4019E0:
 boost::atomics::detail::base_atomic<boost::lockfree::detail::tagged_ptr<boost::lockfree::queue<int*,
 boost::parameter::void_, boost::parameter::void_,
 boost::parameter::void_>::node>, void, 8u,
 false>::compare_exchange_weak(boost::lockfree::detail::tagged_ptr<boost::lockfree::queue<int*,
 boost::parameter::void_, boost::parameter::void_,
 boost::parameter::void_>::node>&,
 boost::lockfree::detail::tagged_ptr<boost::lockfree::queue<int*,
 boost::parameter::void_, boost::parameter::void_,
 boost::parameter::void_>::node>, boost::memory_order) volatile (in
 /tmp/test)
 ==32040== by 0x40121C: bool boost::lockfree::queue<int*,
 boost::parameter::void_, boost::parameter::void_,
 boost::parameter::void_>::do_push<false>(int* const&) (in /tmp/test)
 ==32040== by 0x400CF6: boost::lockfree::queue<int*,
 boost::parameter::void_, boost::parameter::void_,
 boost::parameter::void_>::push(int* const&) (in /tmp/test)
 ==32040== by 0x40097E: main (in /tmp/test)
 ==32040==
 ==32040== Conditional jump or move depends on uninitialised value(s)
 ==32040== at 0x40121F: bool boost::lockfree::queue<int*,
 boost::parameter::void_, boost::parameter::void_,
 boost::parameter::void_>::do_push<false>(int* const&) (in /tmp/test)
 ==32040== by 0x400CF6: boost::lockfree::queue<int*,
 boost::parameter::void_, boost::parameter::void_,
 boost::parameter::void_>::push(int* const&) (in /tmp/test)
 ==32040== by 0x40097E: main (in /tmp/test)
 ==32040==
 ==32040==
 ==32040== HEAP SUMMARY:
 ==32040== in use at exit: 0 bytes in 0 blocks
 ==32040== total heap usage: 129 allocs, 129 frees, 8,256 bytes allocated
 ==32040==
 ==32040== All heap blocks were freed -- no leaks are possible
 ==32040==
 ==32040== For counts of detected and suppressed errors, rerun with: -v
 ==32040== Use --track-origins=yes to see where uninitialised values come
 from
 ==32040== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 2 from 2)
 }}}

 This might be an issue with the atomic library, but I have not been able
 to track it further.

 OS is Fedora F18 (3.8.3-203.fc18.x86_64)

 G++ is g++ (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8)

 Valgrind is valgrind-3.8.1

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/8395>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:12 UTC