STL container of messages

44 views
Skip to first unread message

jobroe

unread,
Jul 12, 2021, 8:02:46 AM7/12/21
to Protocol Buffers

Hi,

is it safe to use a STL container of messages ?

I'm doing it and I seeing rare segmentation faults when executed on our target platform which is a NXP IMX6ull.

The message queue:

std::queue<gap::fibsctl::ReqSetProcessData> reqs_;


a coredump backtrace:

(gdb) bt full
#0  __libc_do_syscall () at libc-do-syscall.S:49
No locals.
#1  0x7695d674 in __libc_signal_restore_set (set=0x74ffe228) at ../sysdeps/unix/sysv/linux/internal-signals.h:86
        _a2tmp = 1962926632
        _a2 = 1962926632
        _nametmp = 175
        _a3tmp = 0
        _a3 = 0
        _a1 = 0
        _a4tmp = 8
        _a1tmp = 2
        _a4 = 8
        _name = 175
#2  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:48
        set = {__val = {512, 0, 1987579284, 1987314847, 6096896, 4294967295, 0, 534576640, 0, 4294967295, 1990345404, 0, 6323000, 256, 1962926780, 1962926820, 256, 1962926820, 1987945800, 1962926760, 2, 2, 6344464, 1987914820, 1962926820, 1987945800, 5852160,
            1987823481, 6344465, 1987835675, 1962927240, 1989531621}}
        pid = <optimized out>
        tid = <optimized out>
        ret = <optimized out>
#3  0x7694eba2 in __GI_abort () at abort.c:79
        save_stage = 1
        act = {__sigaction_handler = {sa_handler = 0x60764c, sa_sigaction = 0x60764c}, sa_mask = {__val = {6324920, 1962927144, 1962927088, 0, 6321736, 534576640, 1962927088, 0, 1962927150, 1962927348, 1994068248, 1, 1962927148, 1962927300, 1962927356, 1992787793,
              1990345404, 1962927308, 1962927308, 2, 0, 1962927150, 1962927150, 0, 16, 5592568, 1990345404, 17, 1991824636, 1991442331, 1991442245, 1962927240}}, sa_flags = 1989984679, sa_restorer = 0x1000}
        sigs = {__val = {32, 0 <repeats 31 times>}}
#4  0x76984b6c in __libc_message (action=action@entry=do_abort, fmt=<optimized out>) at ../sysdeps/posix/libc_fatal.c:155
        ap = {__ap = 0x74ffe4c4}
        fd = <optimized out>
        list = <optimized out>
        nlist = <optimized out>
        cp = <optimized out>
#5  0x7698997a in malloc_printerr (str=<optimized out>) at malloc.c:5347
No locals.
#6  0x7698af42 in _int_free (av=0x76a24a1c <main_arena>, p=0x607d70, have_lock=0) at malloc.c:4201
        tmp = <optimized out>
        e = 0x607d78
        tc_idx = 2
        size = 32
        fb = <optimized out>
        nextchunk = <optimized out>
        nextsize = <optimized out>
        nextinuse = <optimized out>
        prevsize = <optimized out>
        bck = 0x607790
        fwd = <optimized out>
        __PRETTY_FUNCTION__ = "_int_free"
#7  0x76dd6fec in gap::fibsctl::ProcessData::~ProcessData (this=0x607d78, __in_chrg=<optimized out>) at src/fibsctl.pb.cc:1733
No locals.
#8  0x76dd7044 in gap::fibsctl::ReqSetProcessData::SharedDtor (this=<optimized out>) at src/fibsctl.pb.cc:1941
No locals.
#9  gap::fibsctl::ReqSetProcessData::~ReqSetProcessData (this=<optimized out>, __in_chrg=<optimized out>) at src/fibsctl.pb.cc:1935
No locals.
#10 gap::fibsctl::ReqSetProcessData::~ReqSetProcessData (this=0x60cc90, __in_chrg=<optimized out>) at src/fibsctl.pb.cc:1932
No locals.
#11 0x00432360 in __gnu_cxx::new_allocator<gap::fibsctl::ReqSetProcessData>::destroy<gap::fibsctl::ReqSetProcessData> (this=0x7e931c08, __p=<optimized out>) at /usr/include/c++/9.3.0/ext/new_allocator.h:151
No locals.
#12 std::allocator_traits<std::allocator<gap::fibsctl::ReqSetProcessData> >::destroy<gap::fibsctl::ReqSetProcessData> (__a=..., __p=<optimized out>) at /usr/include/c++/9.3.0/bits/alloc_traits.h:497
No locals.
#13 std::deque<gap::fibsctl::ReqSetProcessData, std::allocator<gap::fibsctl::ReqSetProcessData> >::pop_front (this=0x7e931c08) at /usr/include/c++/9.3.0/bits/stl_deque.h:1611
No locals.
#14 std::queue<gap::fibsctl::ReqSetProcessData, std::deque<gap::fibsctl::ReqSetProcessData, std::allocator<gap::fibsctl::ReqSetProcessData> > >::pop (this=0x7e931c08) at /usr/include/c++/9.3.0/bits/stl_queue.h:295
No locals.
#15 CopsMdpPeer::RequestWorker (this=0x7e931be0) at /usr/src/debug/copsman/0.1.0-gitAUTOINC+41c1ea61bc-r0/git/src/copsmdppeer.cpp:74
        lk = {_M_device = 0x7e931c34, _M_owns = true}
        req = {<google::protobuf::Message> = {<google::protobuf::MessageLite> = {_vptr.MessageLite = 0x76debaa0 <vtable for gap::fibsctl::ReqSetProcessData+8>, _internal_metadata_ = {ptr_ = 0, static kUnknownFieldsTagMask = 1, static kMessageOwnedArenaTagMask = 2,
                static kPtrTagMask = 3, static kPtrValueMask = -4}}, <No data fields>}, static kIndexInFileMessages = 7, static _class_data_ = {
            copy_to_from = 0x76cfa435 <google::protobuf::Message::CopyWithSizeCheck(google::protobuf::Message*, google::protobuf::Message const&)>,
            merge_to_from = 0x76dd8ef1 <gap::fibsctl::ReqSetProcessData::MergeImpl(google::protobuf::Message*, google::protobuf::Message const&)>}, process_data_ = 0x6079c8, _cached_size_ = {size_ = {<std::__atomic_base<int>> = {static _S_alignment = 4,
--Type <RET> for more, q to quit, c to continue without paging--
                _M_i = 0}, <No data fields>}}}
#16 0x76ae9b42 in std::execute_native_thread_routine (__p=0x594be8) at ../../../../../../../../../../work-shared/gcc-9.3.0-r0/gcc-9.3.0/libstdc++-v3/src/c++11/thread.cc:80
        __t = {_M_t = {
            _M_t = {<std::_Tuple_impl<0, std::thread::_State*, std::default_delete<std::thread::_State> >> = {<std::_Tuple_impl<1, std::default_delete<std::thread::_State> >> = {<std::_Head_base<1, std::default_delete<std::thread::_State>, true>> = {<std::default_delete<std::thread::_State>> = {<No data fields>}, <No data fields>}, <No data fields>}, <std::_Head_base<0, std::thread::_State*, false>> = {_M_head_impl = 0x594be8}, <No data fields>}, <No data fields>}}}
#17 0x76b97988 in start_thread (arg=0xf1a37314) at pthread_create.c:477
        ret = <optimized out>
        start = <optimized out>
        pd = 0xf1a37314
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {-203034643, -240946412, 1962929024, 2123569600, 3, 1962927512, 1962929024, 1962929136, 0, 2123569600, 0 <repeats 54 times>}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0,
              cleanup = 0x0, canceltype = 0}}}
        not_first_call = <optimized out>
        robust = <optimized out>
#18 0x769ce3dc in ?? () at ../sysdeps/unix/sysv/linux/arm/clone.S:73 from ./lib/libc.so.6
No locals.
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb)

Thanks









Adam Cozzette

unread,
Jul 12, 2021, 2:35:38 PM7/12/21
to jobroe, Protocol Buffers
It's fine to put protobuf messages in STL containers, so if you're seeing segfaults then those must be caused by some other issue.

--
You received this message because you are subscribed to the Google Groups "Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to protobuf+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/protobuf/13c0cc31-2500-4a85-b5b9-2722020cdb04n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages