[ https://issues.apache.org/jira/browse/TS-1405?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13588535#comment-13588535 ]
John Plevyak commented on TS-1405: ---------------------------------- There is still a nasty race condition. The call to set_event_cancel() is async, so it can happen at any time. It first sets the "cancelled" flag then it enqueues in the atomic list. Between these two events EThread::execute can pull it from the external queue, check the flag, call free_event(). If this happens, the atomic list insert will result in a clobber of free'd memory. Instead, the only place that the event can be free'd when "cancelled" is in process_cancel_event() which should probably be named process_cancelled_events(). Also, no atomic is required to set the cancelled flag. This flag can only be set while holding the mutex of the Event, so it is single threaded (there can be no race). I would suggest adding an ink_debug_assert() to that effect, but not using an atomic. It isn't strictly wrong, but it gives the impression that the lock isn't required which it most definitely is. Without the lock there would be a race inside process_event which takes the lock, checks cancelled and the runs the event. If it was possible to cancel without the lock, it could happen between the check and the running of the event which would be "very bad". What do you think Bin Chen? I can update the patch or do you want to incorporate my comments? > apply time-wheel scheduler about event system > ---------------------------------------------- > > Key: TS-1405 > URL: https://issues.apache.org/jira/browse/TS-1405 > Project: Traffic Server > Issue Type: Improvement > Components: Core > Affects Versions: 3.2.0 > Reporter: Bin Chen > Assignee: Bin Chen > Fix For: 3.3.1 > > Attachments: linux_time_wheel.patch, linux_time_wheel_v2.patch, > linux_time_wheel_v3.patch, linux_time_wheel_v4.patch > > > when have more and more event in event system scheduler, it's worse. This is > the reason why we use inactivecop to handler keepalive. the new scheduler is > time-wheel. It's have better time complexity(O(1)) -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira