[ 
https://issues.apache.org/jira/browse/TS-3235?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14285386#comment-14285386
 ] 

zouyu commented on TS-3235:
---------------------------

Attach the pull request for this problem. 

[TS-3235] fix crash problem caused by sync problem in PluginVC.
commit: e1ee3f517a6a916056bd95a4a3c78f3d81685da3


This fix is for the multi-thread sync problem exists in PluginVC of TS-3235.
Below is the scenario of this problem:
1. customer uses interceptplugin which calls TSVIOReenable and TSVConnClose and 
that will call PluginVC's APIs in their work threads
2. That customer creates their work threads by using TSThreadCreate which are 
not controlled by ATS.
3. Because the interceptplugin works in their work threads and the lock 
provided by interceptplugin can only sync their work threads and it cannot sync 
the threads between ATS and interceptplugin, the sync problem will occur when 
TSVIOReenable and TSVConnClose are called from intercetplugin in customer's 
work threads.

So, we need to consider this kind of scenario also, as it is common to customer 
to start their threads.

> PluginVC crashed with unrecognized event
> ----------------------------------------
>
>                 Key: TS-3235
>                 URL: https://issues.apache.org/jira/browse/TS-3235
>             Project: Traffic Server
>          Issue Type: Bug
>          Components: CPP API, HTTP, Plugins
>            Reporter: kang li
>            Assignee: Brian Geffon
>             Fix For: 5.3.0
>
>
> We are using atscppapi to create Intercept plugin.
>  
> From the coredump , that seems Continuation of the InterceptPlugin was 
> already been destroyed. 
> {code}
> #0  0x000000375ac32925 in raise () from /lib64/libc.so.6
> #1  0x000000375ac34105 in abort () from /lib64/libc.so.6
> #2  0x00002b21eeae3458 in ink_die_die_die (retval=1) at ink_error.cc:43
> #3  0x00002b21eeae3525 in ink_fatal_va(int, const char *, typedef 
> __va_list_tag __va_list_tag *) (return_code=1, 
>     message_format=0x2b21eeaf08d8 "%s:%d: failed assert `%s`", 
> ap=0x2b21f4913ad0) at ink_error.cc:65
> #4  0x00002b21eeae35ee in ink_fatal (return_code=1, 
> message_format=0x2b21eeaf08d8 "%s:%d: failed assert `%s`") at ink_error.cc:73
> #5  0x00002b21eeae2160 in _ink_assert (expression=0x76ddb8 "call_event == 
> core_lock_retry_event", file=0x76dd04 "PluginVC.cc", line=203)
>     at ink_assert.cc:37
> #6  0x0000000000530217 in PluginVC::main_handler (this=0x2b24ef007cb8, 
> event=1, data=0xe0f5b80) at PluginVC.cc:203
> #7  0x00000000004f5854 in Continuation::handleEvent (this=0x2b24ef007cb8, 
> event=1, data=0xe0f5b80) at ../iocore/eventsystem/I_Continuation.h:146
> #8  0x0000000000755d26 in EThread::process_event (this=0x309b250, 
> e=0xe0f5b80, calling_code=1) at UnixEThread.cc:145
> #9  0x000000000075610a in EThread::execute (this=0x309b250) at 
> UnixEThread.cc:239
> #10 0x0000000000755284 in spawn_thread_internal (a=0x2849330) at Thread.cc:88
> #11 0x00002b21ef05f9d1 in start_thread () from /lib64/libpthread.so.0
> #12 0x000000375ace8b7d in clone () from /lib64/libc.so.6
> (gdb) p sm_lock_retry_event
> $13 = (Event *) 0x2b2496146e90
> (gdb) p core_lock_retry_event
> $14 = (Event *) 0x0
> (gdb) p active_event
> $15 = (Event *) 0x0
> (gdb) p inactive_event
> $16 = (Event *) 0x0
> (gdb) p *(INKContInternal*)this->core_obj->connect_to
> Cannot access memory at address 0x2b269cd46c10
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to