|
Boost Users : |
From: æ³°å¿ (tjisana.lewis_at_[hidden])
Date: 2022-02-11 16:19:02
I was thinking of revisiting cpp_dec_float for that reason too - thanks for
noting that. Here's the result with address sanitizer ...
=================================================================
==15679==ERROR: AddressSanitizer: heap-use-after-free on address
0x60600000ea48 at pc 0x0000004228c3 bp 0x7f2e041f16a0 sp 0x7f2e041f1698
READ of size 40 at 0x60600000ea48 thread T0
#0 0x4228c2 in boost::multiprecision::backends::cpp_dec_float<50u, int,
void>::cpp_dec_float(boost::multiprecision::backends::cpp_dec_float<50u,
int, void> const&) /usr/include/boost/multiprecision/cpp_dec_float.hpp:210
#1 0x427592 in
boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u,
int, void>,
(boost::multiprecision::expression_template_option)1>::number(boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u,
int, void>, (boost::multiprecision::expression_template_option)1> const&)
/usr/include/boost/multiprecision/number.hpp:47
#2 0x4168ae in
transform<__gnu_cxx::__normal_iterator<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50>
>*,
std::vector<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50>
> > >,
std::back_insert_iterator<std::vector<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50>
> > >, higher_high::calculate(const positions_map&, const
last_tick&)::<lambda(boost::multiprecision::cpp_dec_float_50)> >
/usr/include/c++/11/bits/stl_algo.h:4296
#3 0x410ca3 in
higher_high::calculate(std::unordered_map<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, trade_position,
std::hash<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >, std::equal_to<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, trade_position> > >
const&, last_tick const&) ../src/higher_high.cpp:197
#4 0x4aca5d in operator() ../src/ib_trading_engine.cpp:228
#5 0x4c11d1 in operator()
/usr/include/boost/coroutine2/detail/push_control_block_cc.ipp:90
#6 0x4c27e5 in __invoke_impl<boost::context::fiber,
boost::coroutines2::detail::push_coroutine<last_tick>::control_block::control_block<boost::context::basic_fixedsize_stack<boost::context::stack_traits>,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>
>(boost::context::preallocated,
boost::context::basic_fixedsize_stack<boost::context::stack_traits>&&,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>&&)::<lambda(boost::context::fiber&&)>&,
boost::context::fiber> /usr/include/c++/11/bits/invoke.h:61
#7 0x4c25d0 in
__invoke<boost::coroutines2::detail::push_coroutine<last_tick>::control_block::control_block<boost::context::basic_fixedsize_stack<boost::context::stack_traits>,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>
>(boost::context::preallocated,
boost::context::basic_fixedsize_stack<boost::context::stack_traits>&&,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>&&)::<lambda(boost::context::fiber&&)>&,
boost::context::fiber> /usr/include/c++/11/bits/invoke.h:97
#8 0x4c2537 in
invoke<boost::coroutines2::detail::push_coroutine<last_tick>::control_block::control_block<boost::context::basic_fixedsize_stack<boost::context::stack_traits>,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>
>(boost::context::preallocated,
boost::context::basic_fixedsize_stack<boost::context::stack_traits>&&,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>&&)::<lambda(boost::context::fiber&&)>&,
boost::context::fiber> /usr/include/c++/11/functional:98
#9 0x4c2297 in run /usr/include/boost/context/fiber_fcontext.hpp:140
#10 0x4c2043 in
fiber_entry<boost::context::detail::fiber_record<boost::context::fiber,
boost::context::basic_fixedsize_stack<boost::context::stack_traits>,
boost::coroutines2::detail::push_coroutine<last_tick>::control_block::control_block<boost::context::basic_fixedsize_stack<boost::context::stack_traits>,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>
>(boost::context::preallocated,
boost::context::basic_fixedsize_stack<boost::context::stack_traits>&&,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>&&)::<lambda(boost::context::fiber&&)>
> > /usr/include/boost/context/fiber_fcontext.hpp:80
#11 0x7f2e0740118e in make_fcontext
(/lib64/libboost_context.so.1.78.0+0x118e)
0x60600000ea58 is located 0 bytes to the right of 56-byte region
[0x60600000ea20,0x60600000ea58)
freed by thread T0 here:
#0 0x7f2e074b8dc7 in operator delete(void*, unsigned long)
(/lib64/libasan.so.6+0xb3dc7)
previously allocated by thread T0 here:
#0 0x7f2e074b7f47 in operator new(unsigned long)
(/lib64/libasan.so.6+0xb2f47)
SUMMARY: AddressSanitizer: heap-use-after-free
/usr/include/boost/multiprecision/cpp_dec_float.hpp:210 in
boost::multiprecision::backends::cpp_dec_float<50u, int,
void>::cpp_dec_float(boost::multiprecision::backends::cpp_dec_float<50u,
int, void> const&)
Shadow bytes around the buggy address:
0x0c0c7fff9cf0: fd fd fd fd fd fd fd fa fa fa fa fa fd fd fd fd
0x0c0c7fff9d00: fd fd fd fa fa fa fa fa fd fd fd fd fd fd fd fa
0x0c0c7fff9d10: fa fa fa fa fd fd fd fd fd fd fd fa fa fa fa fa
0x0c0c7fff9d20: fd fd fd fd fd fd fd fa fa fa fa fa fd fd fd fd
0x0c0c7fff9d30: fd fd fd fa fa fa fa fa fd fd fd fd fd fd fd fa
=>0x0c0c7fff9d40: fa fa fa fa fd fd fd fd fd[fd]fd fa fa fa fa fa
0x0c0c7fff9d50: 00 00 00 00 00 00 00 fa fa fa fa fa fa fa fa fa
0x0c0c7fff9d60: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c0c7fff9d70: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c0c7fff9d80: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c0c7fff9d90: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc
==15679==ABORTING
On Fri, Feb 11, 2022 at 2:06 AM John Maddock via Boost-users <
boost-users_at_[hidden]> wrote:
> On 10/02/2022 22:07, tjisana (æ³°å¿) via Boost-users wrote:
> > Okay, rebuild the binary with AddressSanitizer. Since I need to run
> > the program during market hours, I'll do so first thing tomorrow -
> > will let you know how it goes.
>
> Given that the fault is intermittent, and the offending line in the
> backtrace is innocuous, I would hazard a guess at stack overflow.
>
> BTW, just to say, cpp_dec_float does not do correct bankers rounding,
> and so may not be a good choice for critical financial programs.
>
> Best, John.
>
>
> --
> This email has been checked for viruses by Avast antivirus software.
> https://www.avast.com/antivirus
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> https://lists.boost.org/mailman/listinfo.cgi/boost-users
>
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net