Hi, I am trying to debug a crash I am seeing with 7.1.6. This crash happens with no traffic and my custom plugin enabled. My plugin periodically performs async fetches (using atscppapi) to retrieve data from a remote server. The crash is happening in the continuation handler. When I try to print the continuation, the continuation seems to go on forever (see output below). The local_ip in the continuation (netvconnection) has a static INVALID member that seems to recursively reference itself. Is this just a gdb issue or a real problem? Thanks for the help...
Dk. https://github.com/apache/trafficserver/issues/5596 (gdb) bt #0 0x00002b2b4a6a1428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54 #1 0x00002b2b4a6a302a in __GI_abort () at abort.c:89 #2 0x00002b2b4862ae1a in ink_abort (message_format=0x2b2b48659580 "%s:%d: failed assertion `%s`") at ink_error.cc:99 #3 0x00002b2b48623fdf in _ink_assert (expression=0xb3c6e0 "call_event == core_lock_retry_event", file=0xb3c320 "PluginVC.cc", line=219) at ink_assert.cc:37 #4 0x00000000005dceff in PluginVC::main_handler (this=0x61a00002eec0, event=1, data=0x62c0000064c0) at PluginVC.cc:219 #5 0x000000000054c331 in Continuation::handleEvent (this=0x61a00002eec0, event=1, data=0x62c0000064c0) at /root/ts-source/trafficserver-7.1.6/iocore/eventsystem/I_Continuation.h:152 #6 0x0000000000afb538 in EThread::process_event (this=0x2b2b513a0800, e=0x62c0000064c0, calling_code=1) at UnixEThread.cc:140 #7 0x0000000000afba6f in EThread::process_queue (this=0x2b2b513a0800, NegativeQueue=0x2b2b51ab1db0) at UnixEThread.cc:175 #8 0x0000000000afbcf5 in EThread::execute_regular (this=0x2b2b513a0800) at UnixEThread.cc:207 #9 0x0000000000afc397 in EThread::execute (this=0x2b2b513a0800) at UnixEThread.cc:278 #10 0x0000000000af9ca7 in spawn_thread_internal (a=0x604000017d50) at Thread.cc:84 #11 0x00002b2b499b16ba in start_thread (arg=0x2b2b51ab2700) at pthread_create.c:333 #12 0x00002b2b4a77341d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109 (gdb) frame 4 (gdb) p *(PluginVC *) 0x61a00002eec0 $9 = (PluginVC) { <NetVConnection> = { <VConnection> = { <Continuation> = { <force_VFPT_to_top> = { _vptr.force_VFPT_to_top = 0xb3e2d8 <vtable for PluginVC+16> }, members of Continuation: handler = (int (Continuation::*)(Continuation * const, int, void *)) 0x5dc3fa <PluginVC::main_handler(int, void*)>, handler_name = 0xb3c3a0 "&PluginVC::main_handler", mutex = { m_ptr = 0x62a0002cb690 }, link = { <SLink<Continuation>> = { next = 0x0 }, members of Link<Continuation>: prev = 0x0 }, control_flags = { raw_flags = 0 } }, members of VConnection: lerrno = 0 }, members of NetVConnection: options = { ip_proto = NetVCOptions::USE_TCP, ip_family = 2, local_ip = { _family = 0, _addr = { _ip4 = 3200171710, _ip6 = { ---Type <return> to continue, or q <return> to quit--- __in6_u = { __u6_addr8 = '\276' <repeats 16 times>, __u6_addr16 = {48830, 48830, 48830, 48830, 48830, 48830, 48830, 48830}, __u6_addr32 = {3200171710, 3200171710, 3200171710, 3200171710} } }, _byte = '\276' <repeats 16 times>, _u32 = {3200171710, 3200171710, 3200171710, 3200171710}, _u64 = {13744632839234567870, 13744632839234567870} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, ---Type <return> to continue, or q <return> to quit--- _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, ---Type <return> to continue, or q <return> to quit--- _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, ---Type <return> to continue, or q <return> to quit--- _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { ---Type <return> to continue, or q <return> to quit--- _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } ---Type <return> to continue, or q <return> to quit--- }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, ---Type <return> to continue, or q <return> to quit--- _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} ---Type <return> to continue, or q <return> to quit--- } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { ---Type <return> to continue, or q <return> to quit--- _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, ---Type <return> to continue, or q <return> to quit--- __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, ---Type <return> to continue, or q <return> to quit--- _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0} }, static INVALID = { _family = 0, _addr = { _ip4 = 0, _ip6 = { __in6_u = { __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0} } }, _byte = '\000' <repeats 15 times>, _u32 = {0, 0, 0, 0}, _u64 = {0, 0}