You may want to add handling for TS_HTTP_TXN_CLOSE_HOOK. For example:
https://git-wip-us.apache.org/repos/asf?p=trafficserver.git;a=blob;f=plugin s/experimental/stale_while_revalidate/swr.cpp;hb=69bd5473 Thanks, Sudheer On 8/18/14, 6:24 AM, "Acácio Centeno" <acacio.cent...@azion.com> wrote: >I've written a remap plugin but from time to time it's segfaulting. >Looking >at the generated Stack Trace, it's dying on the following function: > >int >TSHttpTxnDebugGet(TSHttpTxn txnp) >{ >* sdk_assert(sdk_sanity_check_* >*txn(txnp) == TS_SUCCESS);* return ((HttpSM *)txnp)->debug_on; >} > >And it's dying on the assert, that is, the transaction handler is no >longer >valid. This seems strange given that this handler had just been passed to >the plugin when TsRemapDoRemap was called: > >/usr/bin/traffic_server - STACK TRACE: >/usr/lib64/trafficserver/libtsutil.so.5(ink_fatal_die+0x0)[0x2b0fd7c999b2] >/usr/lib64/trafficserver/libtsutil.so.5(_Z12ink_get_randv+0x0)[0x2b0fd7c98 >66c] >/usr/bin/traffic_server(_TSAssert+0x0)[0x4ff548] > >*/usr/bin/traffic_server(TSHttpTxnDebugGet+0x30)[0x50c254]* >/usr/lib64/trafficserver/plugins/request_filter.so(_ZN20RequestFilterConte >xt9matchListERSt6vectorIP20RequestFilterElementSaIS2_EE+0x59c)[0x2b0fe5f97 >b42] >/usr/lib64/trafficserver/plugins/request_filter.so(_ZN20RequestFilterConte >xt14matchAllowListEv+0x23)[0x2b0fe5f97c7d] > >*/usr/lib64/trafficserver/plugins/request_filter.so(TSRemapDoRemap+0x1ec)[ >0x2b0fe5fa0ad7]* >/usr/bin/traffic_server(_ZN12RemapPlugins10run_pluginEP17remap_plugin_info >+0x13d)[0x661157] >... <further stack elements removed for readability> ... > >Attaching the process to GDB, I've seen that: > >(gdb) f 7 >#7 0x000000000050c254 in TSHttpTxnDebugGet (txnp=0x2b5797e0dcb0) at >InkAPI.cc:5736 >5736 sdk_assert(sdk_sanity_check_txn(txnp) == TS_SUCCESS); >(gdb) p txnp >$2 = (TSHttpTxn) 0x2b5797e0dcb0 >(gdb) p /x ((HttpSM *) txnp)->magic >$3 = 0xdeadfeed > >That is, indeed this handler is no longer valid, as the transaction is >dead. > >Would there be some condition under which the transaction handler was >supposed to get invalid while a remap plugin is active? Say, if the client >happens to disconnect exactly after the plugin was activated? > >If it may happen, would there be a way for me to assert the handler is >valid prior to calling a Core function that would otherwise raise a >segfault? The reason I would like to do this check is that I could make >only this request fail, instead of making all other possibly thousands of >requests that are being processed along with this one fail, which is what >is going to happen should the system abort. > >If that was not supposed to happen, any ideas on how I could investigate >further the reason why the transaction handler became invalid? Obviously >the plugin is not mangling with the object, as it's an opaque pointer on >the plugin's perspective, so it must have been something that happened on >the Core side, I just cant figure out how to pin point where the handler >became invalid, as this point where it's dying seems to be the first call >to the Core after the plugin was activated. > >We're using version 5.0.1. > >Best Regards, >Acácio Centeno >Software Engineering >Azion Technologies >Porto Alegre, Brasil +55 51 3012 3005 | +55 51 8118 9947 >Miami, USA +1 305 704 8816 > >Quaisquer informações contidas neste e-mail e anexos podem ser >confidenciais e privilegiadas, protegidas por sigilo legal. Qualquer forma >de utilização deste documento depende de autorização do emissor, sujeito >as >penalidades cabíveis. > >Any information in this e-mail and attachments may be confidential and >privileged, protected by legal confidentiality. The use of this document >require authorization by the issuer, subject to penalties.