when I'm compile Xapiand 0.23 for Alpine Linux v3.9 (g++-8.3.0, libstdc++-8.3.0-r0, musl-1.1.20-r4) and then run it and try to insert some data into a clean index using an empty database dir as a starting point, the Xapiand process crashes with SIGSEGV error.
$ valgrind /usr/bin/xapiand -vvvv --uid 1000 --database /tmp/xapiand --bind-address=127.0.0.1 --port=8880 --solo
... trimmed to a relevant part only ...
==5640== Thread 25 Xapiand:SU00:
==5640== Invalid read of size 8
==5640== at 0x5C06FF: lock (std_mutex.h:103)
==5640== by 0x5C06FF: lock_guard (std_mutex.h:162)
==5640== by 0x5C06FF: enqueue (concurrent_queue.h:54)
==5640== by 0x5C06FF: Discovery::schema_updated_send(unsigned long, std::basic_string_view<char, std::char_traits<char> >) (discovery.cc:1438)
==5640== by 0x42EE4D: __invoke_impl<void, void (*&)(long unsigned int, std::__cxx11::basic_string<char>), long unsigned int&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&> (invoke.h:60)
==5640== by 0x42EE4D: __invoke<void (*&)(long unsigned int, std::__cxx11::basic_string<char>), long unsigned int&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&> (invoke.h:95)
==5640== by 0x42EE4D: __apply_impl<void (*&)(long unsigned int, std::__cxx11::basic_string<char>), std::tuple<long unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, 0, 1> (tuple:1678)
==5640== by 0x42EE4D: apply<void (*&)(long unsigned int, std::__cxx11::basic_string<char>), std::tuple<long unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&> (tuple:1687)
==5640== by 0x42EE4D: operator() (debouncer.h:135)
==5640== by 0x42EE4D: operator() (debouncer.h:126)
==5640== by 0x42EE4D: operator() (scheduler.h:83)
==5640== by 0x42EE4D: operator() (threadpool.hh:132)
==5640== by 0x42EE4D: ThreadPoolThread<std::shared_ptr<ScheduledTask<ThreadedScheduler<DebouncerTask<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, void (*)(unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >), std::tuple<unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, (ThreadPolicyType)9>, (ThreadPolicyType)0>, DebouncerTask<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, void (*)(unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >), std::tuple<unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, (ThreadPolicyType)9>, (ThreadPolicyType)0> >, (ThreadPolicyType)0>::operator()() (threadpool.hh:339)
==5640== by 0x42F983: Thread<ThreadPoolThread<std::shared_ptr<ScheduledTask<ThreadedScheduler<DebouncerTask<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, void (*)(unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >), std::tuple<unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, (ThreadPolicyType)9>, (ThreadPolicyType)0>, DebouncerTask<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, void (*)(unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >), std::tuple<unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, (ThreadPolicyType)9>, (ThreadPolicyType)0> >, (ThreadPolicyType)0>, (ThreadPolicyType)0>::_runner(void*) (thread.hh:80)
==5640== by 0x4F1982D: ??? (in /usr/lib/libstdc++.so.6.0.25)
==5640== by 0x40524D7: ??? (in /lib/ld-musl-x86_64.so.1)
==5640== Address 0x5d8 is not stack'd, malloc'd or (recently) free'd
==5640==
==5640==
==5640== Process terminating with default action of signal 11 (SIGSEGV)
==5640== Access not within mapped region at address 0x5D8
==5640== at 0x5C06FF: lock (std_mutex.h:103)
==5640== by 0x5C06FF: lock_guard (std_mutex.h:162)
==5640== by 0x5C06FF: enqueue (concurrent_queue.h:54)
==5640== by 0x5C06FF: Discovery::schema_updated_send(unsigned long, std::basic_string_view<char, std::char_traits<char> >) (discovery.cc:1438)
==5640== by 0x42EE4D: __invoke_impl<void, void (*&)(long unsigned int, std::__cxx11::basic_string<char>), long unsigned int&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&> (invoke.h:60)
==5640== by 0x42EE4D: __invoke<void (*&)(long unsigned int, std::__cxx11::basic_string<char>), long unsigned int&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&> (invoke.h:95)
==5640== by 0x42EE4D: __apply_impl<void (*&)(long unsigned int, std::__cxx11::basic_string<char>), std::tuple<long unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, 0, 1> (tuple:1678)
==5640== by 0x42EE4D: apply<void (*&)(long unsigned int, std::__cxx11::basic_string<char>), std::tuple<long unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&> (tuple:1687)
==5640== by 0x42EE4D: operator() (debouncer.h:135)
==5640== by 0x42EE4D: operator() (debouncer.h:126)
==5640== by 0x42EE4D: operator() (scheduler.h:83)
==5640== by 0x42EE4D: operator() (threadpool.hh:132)
==5640== by 0x42EE4D: ThreadPoolThread<std::shared_ptr<ScheduledTask<ThreadedScheduler<DebouncerTask<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, void (*)(unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >), std::tuple<unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, (ThreadPolicyType)9>, (ThreadPolicyType)0>, DebouncerTask<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, void (*)(unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >), std::tuple<unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, (ThreadPolicyType)9>, (ThreadPolicyType)0> >, (ThreadPolicyType)0>::operator()() (threadpool.hh:339)
==5640== by 0x42F983: Thread<ThreadPoolThread<std::shared_ptr<ScheduledTask<ThreadedScheduler<DebouncerTask<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, void (*)(unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >), std::tuple<unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, (ThreadPolicyType)9>, (ThreadPolicyType)0>, DebouncerTask<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, void (*)(unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >), std::tuple<unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, (ThreadPolicyType)9>, (ThreadPolicyType)0> >, (ThreadPolicyType)0>, (ThreadPolicyType)0>::_runner(void*) (thread.hh:80)
==5640== by 0x4F1982D: ??? (in /usr/lib/libstdc++.so.6.0.25)
==5640== by 0x40524D7: ??? (in /lib/ld-musl-x86_64.so.1)
==5640== If you believe this happened as a result of a stack
==5640== overflow in your program's main thread (unlikely but
==5640== possible), you can try to increase the size of the
==5640== main thread stack using the --main-stacksize= flag.
==5640== The main thread stack size used in this run was 8388608.
==5640==
==5640== HEAP SUMMARY:
==5640== in use at exit: 3,486,814 bytes in 4,921 blocks
==5640== total heap usage: 48,507 allocs, 43,586 frees, 33,747,760 bytes allocated
==5640==
==5640== LEAK SUMMARY:
==5640== definitely lost: 264,232 bytes in 2 blocks
==5640== indirectly lost: 0 bytes in 0 blocks
==5640== possibly lost: 3,484 bytes in 4 blocks
==5640== still reachable: 3,219,098 bytes in 4,915 blocks
==5640== of which reachable via heuristic:
==5640== newarray : 48 bytes in 2 blocks
==5640== suppressed: 0 bytes in 0 blocks
==5640== Rerun with --leak-check=full to see details of leaked memory
==5640==
==5640== For counts of detected and suppressed errors, rerun with: -v
==5640== Use --track-origins=yes to see where uninitialised values come from
==5640== ERROR SUMMARY: 29081 errors from 174 contexts (suppressed: 0 from 0)
==5640== could not unlink /tmp/vgdb-pipe-from-vgdb-to-5640-by-root-on-???
==5640== could not unlink /tmp/vgdb-pipe-to-vgdb-from-5640-by-root-on-???
==5640== could not unlink /tmp/vgdb-pipe-shared-mem-vgdb-5640-by-root-on-???
Segmentation fault
.
Thank you.