cameron314 / concurrentqueue

A fast multi-producer, multi-consumer lock-free concurrent queue for C++11
Other
9.53k stars 1.66k forks source link

Invalid pointer in concurrentqueue #341

Closed poor1017 closed 1 year ago

poor1017 commented 1 year ago

Hi @cameron314

My program encounters a crash, there is a invalid pointer:

p localBlockIndex->index

output:

$15 = (moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>::ImplicitProducer::BlockIndexEntry **) 0x7c5

here is the stack:

#0  0x00005555555c8ae4 in moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>::ImplicitProducer::insert_block_index_entry<(moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>::AllocationMode)0> (this=0x7ffef4004170, idxEntry=@0x7fff097f95e0: 0x12c0, 
    blockStartIndex=140732992078240)
    at /usr/local/include/concurrentqueue.h:2908
#1  0x00005555555c29f0 in moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>::ImplicitProducer::enqueue<(moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>::AllocationMode)0, SynthInfo const&> (this=0x7ffef4004170, element=...)
    at /usr/local/include/concurrentqueue.h:2503
#2  0x00005555555bcaf1 in moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>::inner_enqueue<(moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>::AllocationMode)0, SynthInfo const&> (this=0x7fff0c024ab0, element=...)
    at /usr/local/include/concurrentqueue.h:1376
#3  0x00005555555b86eb in moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>::enqueue (this=0x7fff0c024ab0, item=...)
    at /usr/local/include/concurrentqueue.h:998
#4  0x00005555555a67b4 in MyStubServer::<lambda(std::string, std::string, std::string, std::string, std::string, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*, std::less<std::__cxx11::basic_stri--Type <RET> for more, q to quit, c to continue without paging--
ng<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*> > >, pthread_mutex_t)>::operator()(std::string, std::string, std::string, std::string, std::string, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*> > >, pthread_mutex_t) const (__closure=0x7fff181fa428, 
    triton_url="10.37.24.43:7001", model_name="tts_scheduler", 
    decode_data="\344\273\212\345\244\251\347\232\204\346\227\245\346\234\237\346\230\257\062\060\061\067/08/10", 
    sid="digitalVoice_0ToHLFkc-YHhA-p1wk-Rbqc-6SLeW173K45J", 
    req_id='1' <repeats 14 times>, sess_map=std::map with 96 elements = {...}, 
    mutex=...)
    at /home/liaowenhui2/libjson-rpc-cpp/src/examples/stubserver.cpp:338
#5  0x00005555555adcf0 in std::__invoke_impl<void, MyStubServer::deal_request(const Json::Value&)::<lambda(std::string, std::string, std::string, std::string, std::string, std::map<std::__cxx11::basic_string<char>, moodycamel::ConcurrentQueue<SynthInfo>*>, pthread_mutex_t)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_--Type <RET> for more, q to quit, c to continue without paging--
traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*> > >, pthread_mutex_t>(std::__invoke_other, MyStubServer::<lambda(std::string, std::string, std::string, std::string, std::string, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*> > >, pthread_mutex_t)> &&)
    (__f=...) at /usr/include/c++/9/bits/invoke.h:60
#6  0x00005555555ad7df in std::__invoke<MyStubServer::deal_request(const Json::Value&)::<lambda(std::string, std::string, std::string, std::string, std::string, std::map<std::__cxx11::basic_string<char>, moodycamel::ConcurrentQueue<SynthInfo>*>, pthread_mutex_t)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char--Type <RET> for more, q to quit, c to continue without paging--
>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*> > >, pthread_mutex_t>(MyStubServer::<lambda(std::string, std::string, std::string, std::string, std::string, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*> > >, pthread_mutex_t)> &&) (__fn=...)
    at /usr/include/c++/9/bits/invoke.h:95
#7  0x00005555555ad348 in std::thread::_Invoker<std::tuple<MyStubServer::deal_request(const Json::Value&)::<lambda(std::string, std::string, std::string, std::string, std::string, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*, std::less<std::__cxx11::basic_string<char, std:--Type <RET> for more, q to quit, c to continue without paging--
:char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*> > >, pthread_mutex_t)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*> > >, pthread_mutex_t> >::_M_invoke<0, 1, 2, 3, 4, 5, 6, 7>(std::_Index_tuple<0, 1, 2, 3, 4, 5, 6, 7>) (this=0x7fff181fa428)
    at /usr/include/c++/9/thread:244
#8  0x00005555555ad0e5 in std::thread::_Invoker<std::tuple<MyStubServer::deal_request(const Json::Value&)::<lambda(std::string, std::string, std::string, std::string, std::string, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std--Type <RET> for more, q to quit, c to continue without paging--
::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*> > >, pthread_mutex_t)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*> > >, pthread_mutex_t> >::operator()(void) (this=0x7fff181fa428)
    at /usr/include/c++/9/thread:251
#9  0x00005555555ad096 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<MyStubServer::deal_request(const Json::Value&)::<lambda(std::string, std::string, std::string, std::string, std::string, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::Concur--Type <RET> for more, q to quit, c to continue without paging--
rentQueueDefaultTraits>*> > >, pthread_mutex_t)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, moodycamel::ConcurrentQueue<SynthInfo, moodycamel::ConcurrentQueueDefaultTraits>*> > >, pthread_mutex_t> > >::_M_run(void) (
    this=0x7fff181fa420) at /usr/include/c++/9/thread:195
#10 0x00007ffff7bc5de4 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#11 0x00007ffff7cd9609 in start_thread (arg=<optimized out>)
    at pthread_create.c:477
#12 0x00007ffff7a01133 in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
cameron314 commented 1 year ago

Can you reproduce using a small self-contained example?

poor1017 commented 1 year ago

Hi @cameron314 It's my fault, I do enqueue while the queue is deleted by another thread. Sorry.