You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@trafficserver.apache.org by Daniel Morilha <dm...@gmail.com> on 2013/12/05 17:57:43 UTC
coredump on TSVConnWrite
Hi,
I am facing sporadic SEGFAULTS when calling TSVConnWrite from a custom
plug-in that I am not able to easily reproduce.
TSVConnWrite (connp=0x2aec640b5620, contp=0x2aec640b5da0,
readerp=0x2aec7c110c88, nbytes=9223372036854775807) at InkAPI.cc:6258
Things make me believe this is coming from the FORCE_PLUGIN_MUTEX macro;
if not it might be then subsequent call to vc->do_io_write().
I am able to see the contp has a "valid" mutex.
Any ideas from here? Any good practices I should be taking before calling
TSVConnWrite on my code?
I am dumping a lot of data so it might ring the bells for people more
familiar with the TS internals...
Thanks in advance...
*(gdb) bt*
#0 0x0000000000000000 in ?? ()
#1 0x00000000004b33de in TSVConnWrite (connp=0x2aec640b5620,
contp=0x2aec640b5da0,
readerp=0x2aec7c110c88, nbytes=9223372036854775807) at InkAPI.cc:6258
#2 0x00002aec00ae11dc in write (s=9223372036854775807, r=<optimized out>,
c=0x2aec640b5da0,
v=<optimized out>) at ats.hpp:285
#3 write (r=<optimized out>, c=0x2aec640b5da0, v=<optimized out>) at
ats.hpp:289
#4 Output (continuation=0x2aec640b5da0, consumer=<optimized out>,
this=0x2aec3c03de50) at ats.hpp:1508
*(gdb) info line 6258*
Line 6258 of "InkAPI.cc"
starts at address 0x4b33c8 <TSVConnWrite(TSVConn, TSCont,
TSIOBufferReader, int64_t)+136>
and ends at 0x4b33e9 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+169>.
*(gdb) disas 0x00000000004b33b4,0x00000000004b3410*
Dump of assembler code from 0x4b33b4 to 0x4b3410:
0x00000000004b33b4 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+116>: callq 0x4850c8 <pt...@plt>
0x00000000004b33b9 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+121>: mov 0x18(%rbx),%rsi
0x00000000004b33bd <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+125>: mov %rax,%rdx
0x00000000004b33c0 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+128>: mov %rsp,%rdi
0x00000000004b33c3 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+131>: callq 0x4ba130 <MutexLock::set_and_take(ProxyMutex*,
EThread*)>
*0x00000000004b33c8* <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+136>: mov 0x0(%rbp),%rax
0x00000000004b33cc <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+140>: xor %r8d,%r8d
0x00000000004b33cf <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+143>: mov %r14,%rcx
0x00000000004b33d2 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+146>: mov %r13,%rdx
0x00000000004b33d5 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+149>: mov %rbx,%rsi
0x00000000004b33d8 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+152>: mov %rbp,%rdi
0x00000000004b33db <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+155>: callq *0x18(%rax)
*=> *0x00000000004b33de <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+158>: mov %rax,%rbx
0x00000000004b33e1 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+161>: mov %rsp,%rdi
0x00000000004b33e4 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+164>: callq 0x4ba5e0 <MutexLock::~MutexLock()>
*0x00000000004b33e9* <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+169>: mov %rbx,%rax
0x00000000004b33ec <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+172>: mov 0x18(%rsp),%rbp
0x00000000004b33f1 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+177>: mov 0x10(%rsp),%rbx
0x00000000004b33f6 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+182>: mov 0x20(%rsp),%r12
0x00000000004b33fb <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+187>: mov 0x28(%rsp),%r13
0x00000000004b3400 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+192>: mov 0x30(%rsp),%r14
0x00000000004b3405 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+197>: add $0x38,%rsp
0x00000000004b3409 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+201>: retq
0x00000000004b340a <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
int64_t)+202>: nopw 0x0(%rax,%rax,1)
End of assembler dump.
*(gdb) info vtbl *vc*
vtable for 'VConnection' @ 0x6adbd0 (subobject @ 0x2aec640b5620):
[0]: 0x4bb740 <INKVConnInternal::~INKVConnInternal()>
[1]: 0x4bb650 <INKVConnInternal::~INKVConnInternal()>
[2]: 0x4b2390 <INKVConnInternal::do_io_read(Continuation*, long,
MIOBuffer*)>
*[3]: 0x4b2f70 <INKVConnInternal::do_io_write(Continuation*, long,
IOBufferReader*, bool)>*
[4]: 0x4b2510 <INKVConnInternal::do_io_close(int)>
[5]: 0x4b9780 <INKVConnInternal::do_io_shutdown(ShutdownHowTo_t)>
[6]: 0x5e8a20 <VConnection::set_continuation(VIO*, Continuation*)>
[7]: 0x4b9310 <INKVConnInternal::reenable(VIO*)>
[8]: 0x5e8a40 <VConnection::reenable_re(VIO*)>
[9]: 0x4a4b20 <INKVConnInternal::get_data(int, void*)>
[10]: 0x4a4b90 <INKVConnInternal::set_data(int, void*)>
(gdb) set print object on
(gdb) print *vc
$1 = (INKVConnInternal) {<INKContInternal> = {<DummyVConnection> =
{<VConnection> = {<Continuation> = {<force_VFPT_to_top> =
{_vptr.force_VFPT_to_top = 0x6adbd0 <vtable for INKVConnInternal+16>},
handler = (int (Continuation::*)(Continuation * const, int,
void *)) 0x4b9460 <INKVConnInternal::handle_event(int, void*)>, mutex =
{m_ptr = 0x2aec28017a90},
link = {<SLink<Continuation>> = {next = 0x0}, prev = 0x0}},
lerrno = 0}, <No data fields>},
mdata = 0x2aec7c0bc060,
m_event_func = 0x2aec00adfa90 <ts::continuation::(anonymous
namespace)::handle<ts::Transaction::Transformer<(anonymous
namespace)::SecureSearch> >(TSCont, TSEvent, void*)>, m_event_count = 1,
m_closed = 0,
m_deletable = 0, m_deleted = 0, m_free_magic =
INKCONT_INTERN_MAGIC_ALIVE}, m_read_vio = {
_cont = 0x0, nbytes = 0, ndone = 0, op = 0, buffer = {mbuf = 0x0, entry
= 0x0}, vc_server = 0x0,
mutex = {m_ptr = 0x0}}, m_write_vio = {_cont = 0x2aec50170750, nbytes =
9223372036854775807,
ndone = 0, op = 2, buffer = {mbuf = 0x4214a00, entry = 0x4214a40},
vc_server = 0x2aec640b5620,
mutex = {m_ptr = 0x2aec28017a90}}, m_output_vc = 0x2aec640bae40}
--
Daniel Morilha (dmorilha@gmail.com)
Re: coredump on TSVConnWrite
Posted by Daniel Morilha <dm...@gmail.com>.
Hi all,
To answer my own question that was a silly mistake on my side as it looks
like. It was a matter of checking if the incoming vconnection was still
open before asking for the Transform Output vconnection. I was checking for
that right after I got called but that seems to not be enough as pointed
out here:
https://github.com/linkedin/atscppapi/blob/master/src/TransformationPlugin.cc#L301I
previously though a connection could only be closed by the same
transformation thread, but that doesn't make much sense since there are
mutex for some related operations.
Thanks everybody.
On Thu, Dec 5, 2013 at 9:00 AM, Daniel Morilha <dm...@gmail.com> wrote:
> Forgot to mention this is ats 402 9 and 401 7 thanks
> On Dec 5, 2013 8:57 AM, "Daniel Morilha" <dm...@gmail.com> wrote:
>
>> Hi,
>>
>> I am facing sporadic SEGFAULTS when calling TSVConnWrite from a custom
>> plug-in that I am not able to easily reproduce.
>>
>> TSVConnWrite (connp=0x2aec640b5620, contp=0x2aec640b5da0,
>> readerp=0x2aec7c110c88, nbytes=9223372036854775807) at InkAPI.cc:6258
>>
>> Things make me believe this is coming from the FORCE_PLUGIN_MUTEX
>> macro; if not it might be then subsequent call to vc->do_io_write().
>>
>> I am able to see the contp has a "valid" mutex.
>>
>> Any ideas from here? Any good practices I should be taking before calling
>> TSVConnWrite on my code?
>>
>> I am dumping a lot of data so it might ring the bells for people more
>> familiar with the TS internals...
>>
>> Thanks in advance...
>>
>>
>>
>>
>> *(gdb) bt*
>> #0 0x0000000000000000 in ?? ()
>> #1 0x00000000004b33de in TSVConnWrite (connp=0x2aec640b5620,
>> contp=0x2aec640b5da0,
>> readerp=0x2aec7c110c88, nbytes=9223372036854775807) at InkAPI.cc:6258
>> #2 0x00002aec00ae11dc in write (s=9223372036854775807, r=<optimized
>> out>, c=0x2aec640b5da0,
>> v=<optimized out>) at ats.hpp:285
>> #3 write (r=<optimized out>, c=0x2aec640b5da0, v=<optimized out>) at
>> ats.hpp:289
>> #4 Output (continuation=0x2aec640b5da0, consumer=<optimized out>,
>> this=0x2aec3c03de50) at ats.hpp:1508
>>
>>
>>
>>
>> *(gdb) info line 6258*
>> Line 6258 of "InkAPI.cc"
>> starts at address 0x4b33c8 <TSVConnWrite(TSVConn, TSCont,
>> TSIOBufferReader, int64_t)+136>
>> and ends at 0x4b33e9 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+169>.
>>
>>
>>
>> *(gdb) disas 0x00000000004b33b4,0x00000000004b3410*
>> Dump of assembler code from 0x4b33b4 to 0x4b3410:
>> 0x00000000004b33b4 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+116>: callq 0x4850c8 <pt...@plt>
>> 0x00000000004b33b9 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+121>: mov 0x18(%rbx),%rsi
>> 0x00000000004b33bd <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+125>: mov %rax,%rdx
>> 0x00000000004b33c0 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+128>: mov %rsp,%rdi
>> 0x00000000004b33c3 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+131>: callq 0x4ba130 <MutexLock::set_and_take(ProxyMutex*,
>> EThread*)>
>> *0x00000000004b33c8* <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+136>: mov 0x0(%rbp),%rax
>> 0x00000000004b33cc <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+140>: xor %r8d,%r8d
>> 0x00000000004b33cf <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+143>: mov %r14,%rcx
>> 0x00000000004b33d2 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+146>: mov %r13,%rdx
>> 0x00000000004b33d5 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+149>: mov %rbx,%rsi
>> 0x00000000004b33d8 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+152>: mov %rbp,%rdi
>> 0x00000000004b33db <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+155>: callq *0x18(%rax)
>> *=> *0x00000000004b33de <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+158>: mov %rax,%rbx
>> 0x00000000004b33e1 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+161>: mov %rsp,%rdi
>> 0x00000000004b33e4 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+164>: callq 0x4ba5e0 <MutexLock::~MutexLock()>
>> *0x00000000004b33e9* <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+169>: mov %rbx,%rax
>> 0x00000000004b33ec <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+172>: mov 0x18(%rsp),%rbp
>> 0x00000000004b33f1 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+177>: mov 0x10(%rsp),%rbx
>> 0x00000000004b33f6 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+182>: mov 0x20(%rsp),%r12
>> 0x00000000004b33fb <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+187>: mov 0x28(%rsp),%r13
>> 0x00000000004b3400 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+192>: mov 0x30(%rsp),%r14
>> 0x00000000004b3405 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+197>: add $0x38,%rsp
>> 0x00000000004b3409 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+201>: retq
>> 0x00000000004b340a <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+202>: nopw 0x0(%rax,%rax,1)
>> End of assembler dump.
>>
>>
>>
>> *(gdb) info vtbl *vc*
>> vtable for 'VConnection' @ 0x6adbd0 (subobject @ 0x2aec640b5620):
>> [0]: 0x4bb740 <INKVConnInternal::~INKVConnInternal()>
>> [1]: 0x4bb650 <INKVConnInternal::~INKVConnInternal()>
>> [2]: 0x4b2390 <INKVConnInternal::do_io_read(Continuation*, long,
>> MIOBuffer*)>
>> *[3]: 0x4b2f70 <INKVConnInternal::do_io_write(Continuation*, long,
>> IOBufferReader*, bool)>*
>> [4]: 0x4b2510 <INKVConnInternal::do_io_close(int)>
>> [5]: 0x4b9780 <INKVConnInternal::do_io_shutdown(ShutdownHowTo_t)>
>> [6]: 0x5e8a20 <VConnection::set_continuation(VIO*, Continuation*)>
>> [7]: 0x4b9310 <INKVConnInternal::reenable(VIO*)>
>> [8]: 0x5e8a40 <VConnection::reenable_re(VIO*)>
>> [9]: 0x4a4b20 <INKVConnInternal::get_data(int, void*)>
>> [10]: 0x4a4b90 <INKVConnInternal::set_data(int, void*)>
>>
>>
>>
>> (gdb) set print object on
>> (gdb) print *vc
>> $1 = (INKVConnInternal) {<INKContInternal> = {<DummyVConnection> =
>> {<VConnection> = {<Continuation> = {<force_VFPT_to_top> =
>> {_vptr.force_VFPT_to_top = 0x6adbd0 <vtable for INKVConnInternal+16>},
>> handler = (int (Continuation::*)(Continuation * const, int,
>> void *)) 0x4b9460 <INKVConnInternal::handle_event(int, void*)>, mutex
>> = {m_ptr = 0x2aec28017a90},
>> link = {<SLink<Continuation>> = {next = 0x0}, prev = 0x0}},
>> lerrno = 0}, <No data fields>},
>> mdata = 0x2aec7c0bc060,
>> m_event_func = 0x2aec00adfa90 <ts::continuation::(anonymous
>> namespace)::handle<ts::Transaction::Transformer<(anonymous
>> namespace)::SecureSearch> >(TSCont, TSEvent, void*)>, m_event_count = 1,
>> m_closed = 0,
>> m_deletable = 0, m_deleted = 0, m_free_magic =
>> INKCONT_INTERN_MAGIC_ALIVE}, m_read_vio = {
>> _cont = 0x0, nbytes = 0, ndone = 0, op = 0, buffer = {mbuf = 0x0,
>> entry = 0x0}, vc_server = 0x0,
>> mutex = {m_ptr = 0x0}}, m_write_vio = {_cont = 0x2aec50170750, nbytes
>> = 9223372036854775807,
>> ndone = 0, op = 2, buffer = {mbuf = 0x4214a00, entry = 0x4214a40},
>> vc_server = 0x2aec640b5620,
>> mutex = {m_ptr = 0x2aec28017a90}}, m_output_vc = 0x2aec640bae40}
>>
>>
>>
>>
>> --
>> Daniel Morilha (dmorilha@gmail.com)
>>
>
--
Daniel Morilha (dmorilha@gmail.com)
Re: coredump on TSVConnWrite
Posted by Daniel Morilha <dm...@gmail.com>.
Hi all,
To answer my own question that was a silly mistake on my side as it looks
like. It was a matter of checking if the incoming vconnection was still
open before asking for the Transform Output vconnection. I was checking for
that right after I got called but that seems to not be enough as pointed
out here:
https://github.com/linkedin/atscppapi/blob/master/src/TransformationPlugin.cc#L301I
previously though a connection could only be closed by the same
transformation thread, but that doesn't make much sense since there are
mutex for some related operations.
Thanks everybody.
On Thu, Dec 5, 2013 at 9:00 AM, Daniel Morilha <dm...@gmail.com> wrote:
> Forgot to mention this is ats 402 9 and 401 7 thanks
> On Dec 5, 2013 8:57 AM, "Daniel Morilha" <dm...@gmail.com> wrote:
>
>> Hi,
>>
>> I am facing sporadic SEGFAULTS when calling TSVConnWrite from a custom
>> plug-in that I am not able to easily reproduce.
>>
>> TSVConnWrite (connp=0x2aec640b5620, contp=0x2aec640b5da0,
>> readerp=0x2aec7c110c88, nbytes=9223372036854775807) at InkAPI.cc:6258
>>
>> Things make me believe this is coming from the FORCE_PLUGIN_MUTEX
>> macro; if not it might be then subsequent call to vc->do_io_write().
>>
>> I am able to see the contp has a "valid" mutex.
>>
>> Any ideas from here? Any good practices I should be taking before calling
>> TSVConnWrite on my code?
>>
>> I am dumping a lot of data so it might ring the bells for people more
>> familiar with the TS internals...
>>
>> Thanks in advance...
>>
>>
>>
>>
>> *(gdb) bt*
>> #0 0x0000000000000000 in ?? ()
>> #1 0x00000000004b33de in TSVConnWrite (connp=0x2aec640b5620,
>> contp=0x2aec640b5da0,
>> readerp=0x2aec7c110c88, nbytes=9223372036854775807) at InkAPI.cc:6258
>> #2 0x00002aec00ae11dc in write (s=9223372036854775807, r=<optimized
>> out>, c=0x2aec640b5da0,
>> v=<optimized out>) at ats.hpp:285
>> #3 write (r=<optimized out>, c=0x2aec640b5da0, v=<optimized out>) at
>> ats.hpp:289
>> #4 Output (continuation=0x2aec640b5da0, consumer=<optimized out>,
>> this=0x2aec3c03de50) at ats.hpp:1508
>>
>>
>>
>>
>> *(gdb) info line 6258*
>> Line 6258 of "InkAPI.cc"
>> starts at address 0x4b33c8 <TSVConnWrite(TSVConn, TSCont,
>> TSIOBufferReader, int64_t)+136>
>> and ends at 0x4b33e9 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+169>.
>>
>>
>>
>> *(gdb) disas 0x00000000004b33b4,0x00000000004b3410*
>> Dump of assembler code from 0x4b33b4 to 0x4b3410:
>> 0x00000000004b33b4 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+116>: callq 0x4850c8 <pt...@plt>
>> 0x00000000004b33b9 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+121>: mov 0x18(%rbx),%rsi
>> 0x00000000004b33bd <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+125>: mov %rax,%rdx
>> 0x00000000004b33c0 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+128>: mov %rsp,%rdi
>> 0x00000000004b33c3 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+131>: callq 0x4ba130 <MutexLock::set_and_take(ProxyMutex*,
>> EThread*)>
>> *0x00000000004b33c8* <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+136>: mov 0x0(%rbp),%rax
>> 0x00000000004b33cc <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+140>: xor %r8d,%r8d
>> 0x00000000004b33cf <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+143>: mov %r14,%rcx
>> 0x00000000004b33d2 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+146>: mov %r13,%rdx
>> 0x00000000004b33d5 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+149>: mov %rbx,%rsi
>> 0x00000000004b33d8 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+152>: mov %rbp,%rdi
>> 0x00000000004b33db <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+155>: callq *0x18(%rax)
>> *=> *0x00000000004b33de <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+158>: mov %rax,%rbx
>> 0x00000000004b33e1 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+161>: mov %rsp,%rdi
>> 0x00000000004b33e4 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+164>: callq 0x4ba5e0 <MutexLock::~MutexLock()>
>> *0x00000000004b33e9* <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+169>: mov %rbx,%rax
>> 0x00000000004b33ec <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+172>: mov 0x18(%rsp),%rbp
>> 0x00000000004b33f1 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+177>: mov 0x10(%rsp),%rbx
>> 0x00000000004b33f6 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+182>: mov 0x20(%rsp),%r12
>> 0x00000000004b33fb <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+187>: mov 0x28(%rsp),%r13
>> 0x00000000004b3400 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+192>: mov 0x30(%rsp),%r14
>> 0x00000000004b3405 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+197>: add $0x38,%rsp
>> 0x00000000004b3409 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+201>: retq
>> 0x00000000004b340a <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
>> int64_t)+202>: nopw 0x0(%rax,%rax,1)
>> End of assembler dump.
>>
>>
>>
>> *(gdb) info vtbl *vc*
>> vtable for 'VConnection' @ 0x6adbd0 (subobject @ 0x2aec640b5620):
>> [0]: 0x4bb740 <INKVConnInternal::~INKVConnInternal()>
>> [1]: 0x4bb650 <INKVConnInternal::~INKVConnInternal()>
>> [2]: 0x4b2390 <INKVConnInternal::do_io_read(Continuation*, long,
>> MIOBuffer*)>
>> *[3]: 0x4b2f70 <INKVConnInternal::do_io_write(Continuation*, long,
>> IOBufferReader*, bool)>*
>> [4]: 0x4b2510 <INKVConnInternal::do_io_close(int)>
>> [5]: 0x4b9780 <INKVConnInternal::do_io_shutdown(ShutdownHowTo_t)>
>> [6]: 0x5e8a20 <VConnection::set_continuation(VIO*, Continuation*)>
>> [7]: 0x4b9310 <INKVConnInternal::reenable(VIO*)>
>> [8]: 0x5e8a40 <VConnection::reenable_re(VIO*)>
>> [9]: 0x4a4b20 <INKVConnInternal::get_data(int, void*)>
>> [10]: 0x4a4b90 <INKVConnInternal::set_data(int, void*)>
>>
>>
>>
>> (gdb) set print object on
>> (gdb) print *vc
>> $1 = (INKVConnInternal) {<INKContInternal> = {<DummyVConnection> =
>> {<VConnection> = {<Continuation> = {<force_VFPT_to_top> =
>> {_vptr.force_VFPT_to_top = 0x6adbd0 <vtable for INKVConnInternal+16>},
>> handler = (int (Continuation::*)(Continuation * const, int,
>> void *)) 0x4b9460 <INKVConnInternal::handle_event(int, void*)>, mutex
>> = {m_ptr = 0x2aec28017a90},
>> link = {<SLink<Continuation>> = {next = 0x0}, prev = 0x0}},
>> lerrno = 0}, <No data fields>},
>> mdata = 0x2aec7c0bc060,
>> m_event_func = 0x2aec00adfa90 <ts::continuation::(anonymous
>> namespace)::handle<ts::Transaction::Transformer<(anonymous
>> namespace)::SecureSearch> >(TSCont, TSEvent, void*)>, m_event_count = 1,
>> m_closed = 0,
>> m_deletable = 0, m_deleted = 0, m_free_magic =
>> INKCONT_INTERN_MAGIC_ALIVE}, m_read_vio = {
>> _cont = 0x0, nbytes = 0, ndone = 0, op = 0, buffer = {mbuf = 0x0,
>> entry = 0x0}, vc_server = 0x0,
>> mutex = {m_ptr = 0x0}}, m_write_vio = {_cont = 0x2aec50170750, nbytes
>> = 9223372036854775807,
>> ndone = 0, op = 2, buffer = {mbuf = 0x4214a00, entry = 0x4214a40},
>> vc_server = 0x2aec640b5620,
>> mutex = {m_ptr = 0x2aec28017a90}}, m_output_vc = 0x2aec640bae40}
>>
>>
>>
>>
>> --
>> Daniel Morilha (dmorilha@gmail.com)
>>
>
--
Daniel Morilha (dmorilha@gmail.com)
Re: coredump on TSVConnWrite
Posted by Daniel Morilha <dm...@gmail.com>.
Forgot to mention this is ats 402 9 and 401 7 thanks
On Dec 5, 2013 8:57 AM, "Daniel Morilha" <dm...@gmail.com> wrote:
> Hi,
>
> I am facing sporadic SEGFAULTS when calling TSVConnWrite from a custom
> plug-in that I am not able to easily reproduce.
>
> TSVConnWrite (connp=0x2aec640b5620, contp=0x2aec640b5da0,
> readerp=0x2aec7c110c88, nbytes=9223372036854775807) at InkAPI.cc:6258
>
> Things make me believe this is coming from the FORCE_PLUGIN_MUTEX macro;
> if not it might be then subsequent call to vc->do_io_write().
>
> I am able to see the contp has a "valid" mutex.
>
> Any ideas from here? Any good practices I should be taking before calling
> TSVConnWrite on my code?
>
> I am dumping a lot of data so it might ring the bells for people more
> familiar with the TS internals...
>
> Thanks in advance...
>
>
>
>
> *(gdb) bt*
> #0 0x0000000000000000 in ?? ()
> #1 0x00000000004b33de in TSVConnWrite (connp=0x2aec640b5620,
> contp=0x2aec640b5da0,
> readerp=0x2aec7c110c88, nbytes=9223372036854775807) at InkAPI.cc:6258
> #2 0x00002aec00ae11dc in write (s=9223372036854775807, r=<optimized out>,
> c=0x2aec640b5da0,
> v=<optimized out>) at ats.hpp:285
> #3 write (r=<optimized out>, c=0x2aec640b5da0, v=<optimized out>) at
> ats.hpp:289
> #4 Output (continuation=0x2aec640b5da0, consumer=<optimized out>,
> this=0x2aec3c03de50) at ats.hpp:1508
>
>
>
>
> *(gdb) info line 6258*
> Line 6258 of "InkAPI.cc"
> starts at address 0x4b33c8 <TSVConnWrite(TSVConn, TSCont,
> TSIOBufferReader, int64_t)+136>
> and ends at 0x4b33e9 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+169>.
>
>
>
> *(gdb) disas 0x00000000004b33b4,0x00000000004b3410*
> Dump of assembler code from 0x4b33b4 to 0x4b3410:
> 0x00000000004b33b4 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+116>: callq 0x4850c8 <pt...@plt>
> 0x00000000004b33b9 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+121>: mov 0x18(%rbx),%rsi
> 0x00000000004b33bd <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+125>: mov %rax,%rdx
> 0x00000000004b33c0 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+128>: mov %rsp,%rdi
> 0x00000000004b33c3 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+131>: callq 0x4ba130 <MutexLock::set_and_take(ProxyMutex*,
> EThread*)>
> *0x00000000004b33c8* <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+136>: mov 0x0(%rbp),%rax
> 0x00000000004b33cc <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+140>: xor %r8d,%r8d
> 0x00000000004b33cf <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+143>: mov %r14,%rcx
> 0x00000000004b33d2 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+146>: mov %r13,%rdx
> 0x00000000004b33d5 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+149>: mov %rbx,%rsi
> 0x00000000004b33d8 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+152>: mov %rbp,%rdi
> 0x00000000004b33db <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+155>: callq *0x18(%rax)
> *=> *0x00000000004b33de <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+158>: mov %rax,%rbx
> 0x00000000004b33e1 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+161>: mov %rsp,%rdi
> 0x00000000004b33e4 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+164>: callq 0x4ba5e0 <MutexLock::~MutexLock()>
> *0x00000000004b33e9* <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+169>: mov %rbx,%rax
> 0x00000000004b33ec <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+172>: mov 0x18(%rsp),%rbp
> 0x00000000004b33f1 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+177>: mov 0x10(%rsp),%rbx
> 0x00000000004b33f6 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+182>: mov 0x20(%rsp),%r12
> 0x00000000004b33fb <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+187>: mov 0x28(%rsp),%r13
> 0x00000000004b3400 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+192>: mov 0x30(%rsp),%r14
> 0x00000000004b3405 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+197>: add $0x38,%rsp
> 0x00000000004b3409 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+201>: retq
> 0x00000000004b340a <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+202>: nopw 0x0(%rax,%rax,1)
> End of assembler dump.
>
>
>
> *(gdb) info vtbl *vc*
> vtable for 'VConnection' @ 0x6adbd0 (subobject @ 0x2aec640b5620):
> [0]: 0x4bb740 <INKVConnInternal::~INKVConnInternal()>
> [1]: 0x4bb650 <INKVConnInternal::~INKVConnInternal()>
> [2]: 0x4b2390 <INKVConnInternal::do_io_read(Continuation*, long,
> MIOBuffer*)>
> *[3]: 0x4b2f70 <INKVConnInternal::do_io_write(Continuation*, long,
> IOBufferReader*, bool)>*
> [4]: 0x4b2510 <INKVConnInternal::do_io_close(int)>
> [5]: 0x4b9780 <INKVConnInternal::do_io_shutdown(ShutdownHowTo_t)>
> [6]: 0x5e8a20 <VConnection::set_continuation(VIO*, Continuation*)>
> [7]: 0x4b9310 <INKVConnInternal::reenable(VIO*)>
> [8]: 0x5e8a40 <VConnection::reenable_re(VIO*)>
> [9]: 0x4a4b20 <INKVConnInternal::get_data(int, void*)>
> [10]: 0x4a4b90 <INKVConnInternal::set_data(int, void*)>
>
>
>
> (gdb) set print object on
> (gdb) print *vc
> $1 = (INKVConnInternal) {<INKContInternal> = {<DummyVConnection> =
> {<VConnection> = {<Continuation> = {<force_VFPT_to_top> =
> {_vptr.force_VFPT_to_top = 0x6adbd0 <vtable for INKVConnInternal+16>},
> handler = (int (Continuation::*)(Continuation * const, int,
> void *)) 0x4b9460 <INKVConnInternal::handle_event(int, void*)>, mutex
> = {m_ptr = 0x2aec28017a90},
> link = {<SLink<Continuation>> = {next = 0x0}, prev = 0x0}},
> lerrno = 0}, <No data fields>},
> mdata = 0x2aec7c0bc060,
> m_event_func = 0x2aec00adfa90 <ts::continuation::(anonymous
> namespace)::handle<ts::Transaction::Transformer<(anonymous
> namespace)::SecureSearch> >(TSCont, TSEvent, void*)>, m_event_count = 1,
> m_closed = 0,
> m_deletable = 0, m_deleted = 0, m_free_magic =
> INKCONT_INTERN_MAGIC_ALIVE}, m_read_vio = {
> _cont = 0x0, nbytes = 0, ndone = 0, op = 0, buffer = {mbuf = 0x0,
> entry = 0x0}, vc_server = 0x0,
> mutex = {m_ptr = 0x0}}, m_write_vio = {_cont = 0x2aec50170750, nbytes
> = 9223372036854775807,
> ndone = 0, op = 2, buffer = {mbuf = 0x4214a00, entry = 0x4214a40},
> vc_server = 0x2aec640b5620,
> mutex = {m_ptr = 0x2aec28017a90}}, m_output_vc = 0x2aec640bae40}
>
>
>
>
> --
> Daniel Morilha (dmorilha@gmail.com)
>
Re: coredump on TSVConnWrite
Posted by Daniel Morilha <dm...@gmail.com>.
Forgot to mention this is ats 402 9 and 401 7 thanks
On Dec 5, 2013 8:57 AM, "Daniel Morilha" <dm...@gmail.com> wrote:
> Hi,
>
> I am facing sporadic SEGFAULTS when calling TSVConnWrite from a custom
> plug-in that I am not able to easily reproduce.
>
> TSVConnWrite (connp=0x2aec640b5620, contp=0x2aec640b5da0,
> readerp=0x2aec7c110c88, nbytes=9223372036854775807) at InkAPI.cc:6258
>
> Things make me believe this is coming from the FORCE_PLUGIN_MUTEX macro;
> if not it might be then subsequent call to vc->do_io_write().
>
> I am able to see the contp has a "valid" mutex.
>
> Any ideas from here? Any good practices I should be taking before calling
> TSVConnWrite on my code?
>
> I am dumping a lot of data so it might ring the bells for people more
> familiar with the TS internals...
>
> Thanks in advance...
>
>
>
>
> *(gdb) bt*
> #0 0x0000000000000000 in ?? ()
> #1 0x00000000004b33de in TSVConnWrite (connp=0x2aec640b5620,
> contp=0x2aec640b5da0,
> readerp=0x2aec7c110c88, nbytes=9223372036854775807) at InkAPI.cc:6258
> #2 0x00002aec00ae11dc in write (s=9223372036854775807, r=<optimized out>,
> c=0x2aec640b5da0,
> v=<optimized out>) at ats.hpp:285
> #3 write (r=<optimized out>, c=0x2aec640b5da0, v=<optimized out>) at
> ats.hpp:289
> #4 Output (continuation=0x2aec640b5da0, consumer=<optimized out>,
> this=0x2aec3c03de50) at ats.hpp:1508
>
>
>
>
> *(gdb) info line 6258*
> Line 6258 of "InkAPI.cc"
> starts at address 0x4b33c8 <TSVConnWrite(TSVConn, TSCont,
> TSIOBufferReader, int64_t)+136>
> and ends at 0x4b33e9 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+169>.
>
>
>
> *(gdb) disas 0x00000000004b33b4,0x00000000004b3410*
> Dump of assembler code from 0x4b33b4 to 0x4b3410:
> 0x00000000004b33b4 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+116>: callq 0x4850c8 <pt...@plt>
> 0x00000000004b33b9 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+121>: mov 0x18(%rbx),%rsi
> 0x00000000004b33bd <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+125>: mov %rax,%rdx
> 0x00000000004b33c0 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+128>: mov %rsp,%rdi
> 0x00000000004b33c3 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+131>: callq 0x4ba130 <MutexLock::set_and_take(ProxyMutex*,
> EThread*)>
> *0x00000000004b33c8* <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+136>: mov 0x0(%rbp),%rax
> 0x00000000004b33cc <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+140>: xor %r8d,%r8d
> 0x00000000004b33cf <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+143>: mov %r14,%rcx
> 0x00000000004b33d2 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+146>: mov %r13,%rdx
> 0x00000000004b33d5 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+149>: mov %rbx,%rsi
> 0x00000000004b33d8 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+152>: mov %rbp,%rdi
> 0x00000000004b33db <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+155>: callq *0x18(%rax)
> *=> *0x00000000004b33de <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+158>: mov %rax,%rbx
> 0x00000000004b33e1 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+161>: mov %rsp,%rdi
> 0x00000000004b33e4 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+164>: callq 0x4ba5e0 <MutexLock::~MutexLock()>
> *0x00000000004b33e9* <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+169>: mov %rbx,%rax
> 0x00000000004b33ec <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+172>: mov 0x18(%rsp),%rbp
> 0x00000000004b33f1 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+177>: mov 0x10(%rsp),%rbx
> 0x00000000004b33f6 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+182>: mov 0x20(%rsp),%r12
> 0x00000000004b33fb <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+187>: mov 0x28(%rsp),%r13
> 0x00000000004b3400 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+192>: mov 0x30(%rsp),%r14
> 0x00000000004b3405 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+197>: add $0x38,%rsp
> 0x00000000004b3409 <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+201>: retq
> 0x00000000004b340a <TSVConnWrite(TSVConn, TSCont, TSIOBufferReader,
> int64_t)+202>: nopw 0x0(%rax,%rax,1)
> End of assembler dump.
>
>
>
> *(gdb) info vtbl *vc*
> vtable for 'VConnection' @ 0x6adbd0 (subobject @ 0x2aec640b5620):
> [0]: 0x4bb740 <INKVConnInternal::~INKVConnInternal()>
> [1]: 0x4bb650 <INKVConnInternal::~INKVConnInternal()>
> [2]: 0x4b2390 <INKVConnInternal::do_io_read(Continuation*, long,
> MIOBuffer*)>
> *[3]: 0x4b2f70 <INKVConnInternal::do_io_write(Continuation*, long,
> IOBufferReader*, bool)>*
> [4]: 0x4b2510 <INKVConnInternal::do_io_close(int)>
> [5]: 0x4b9780 <INKVConnInternal::do_io_shutdown(ShutdownHowTo_t)>
> [6]: 0x5e8a20 <VConnection::set_continuation(VIO*, Continuation*)>
> [7]: 0x4b9310 <INKVConnInternal::reenable(VIO*)>
> [8]: 0x5e8a40 <VConnection::reenable_re(VIO*)>
> [9]: 0x4a4b20 <INKVConnInternal::get_data(int, void*)>
> [10]: 0x4a4b90 <INKVConnInternal::set_data(int, void*)>
>
>
>
> (gdb) set print object on
> (gdb) print *vc
> $1 = (INKVConnInternal) {<INKContInternal> = {<DummyVConnection> =
> {<VConnection> = {<Continuation> = {<force_VFPT_to_top> =
> {_vptr.force_VFPT_to_top = 0x6adbd0 <vtable for INKVConnInternal+16>},
> handler = (int (Continuation::*)(Continuation * const, int,
> void *)) 0x4b9460 <INKVConnInternal::handle_event(int, void*)>, mutex
> = {m_ptr = 0x2aec28017a90},
> link = {<SLink<Continuation>> = {next = 0x0}, prev = 0x0}},
> lerrno = 0}, <No data fields>},
> mdata = 0x2aec7c0bc060,
> m_event_func = 0x2aec00adfa90 <ts::continuation::(anonymous
> namespace)::handle<ts::Transaction::Transformer<(anonymous
> namespace)::SecureSearch> >(TSCont, TSEvent, void*)>, m_event_count = 1,
> m_closed = 0,
> m_deletable = 0, m_deleted = 0, m_free_magic =
> INKCONT_INTERN_MAGIC_ALIVE}, m_read_vio = {
> _cont = 0x0, nbytes = 0, ndone = 0, op = 0, buffer = {mbuf = 0x0,
> entry = 0x0}, vc_server = 0x0,
> mutex = {m_ptr = 0x0}}, m_write_vio = {_cont = 0x2aec50170750, nbytes
> = 9223372036854775807,
> ndone = 0, op = 2, buffer = {mbuf = 0x4214a00, entry = 0x4214a40},
> vc_server = 0x2aec640b5620,
> mutex = {m_ptr = 0x2aec28017a90}}, m_output_vc = 0x2aec640bae40}
>
>
>
>
> --
> Daniel Morilha (dmorilha@gmail.com)
>