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

ASF GitHub Bot commented on PROTON-2792:
----------------------------------------

astitcher commented on PR #421:
URL: https://github.com/apache/qpid-proton/pull/421#issuecomment-1981610822

   There is a clear thread safety violation in  ```run_timer_jobs`` use of  
```is_active_``` without using the appropriate lock - in fact this is so 
obvious that I'm puzzled we haven't seen it in the TSAN or even static analyzer 
runs - maybe we just missed it!
   Unfortunately this fix has changed the previous semantics of task 
cancellation: An important way to cancel a task is from a previous task 
callback. However this change makes that unreliable as it only checks for task 
cancellation before executing the entire batch of tasks that are runable at the 
point where ```run_timer_jobs``` is called. So if an earlier task in the batch 
cancels a later task in the batch then that cancellation would not be honored.
   I'm looking at a fix that should work correctly now and I'll post it here 
when I'm done.




> [cpp] Segmentation fault in container::impl::run_timer_jobs
> -----------------------------------------------------------
>
>                 Key: PROTON-2792
>                 URL: https://issues.apache.org/jira/browse/PROTON-2792
>             Project: Qpid Proton
>          Issue Type: Bug
>          Components: cpp-binding
>    Affects Versions: proton-c-0.38.0
>            Reporter: Martin Zlomek
>            Priority: Major
>
> PROTON-2438 introduced a race condition in 
> [reading|https://github.com/DreamPearl/qpid-proton/blob/8142e3cecd9f668992e76a5448afc09fd7b1030a/cpp/src/proactor_container_impl.cpp#L545]
>  / 
> [writing|https://github.com/DreamPearl/qpid-proton/blob/8142e3cecd9f668992e76a5448afc09fd7b1030a/cpp/src/proactor_container_impl.cpp#L547]
>  {{is_active_}} in 
> [{{run_timer_jobs()}}|https://github.com/DreamPearl/qpid-proton/blob/8142e3cecd9f668992e76a5448afc09fd7b1030a/cpp/src/proactor_container_impl.cpp#L498]
>  while modifying it in 
> [{{schedule()}}|https://github.com/DreamPearl/qpid-proton/blob/8142e3cecd9f668992e76a5448afc09fd7b1030a/cpp/src/proactor_container_impl.cpp#L455]
>  or 
> [{{cancel()}}|https://github.com/DreamPearl/qpid-proton/blob/8142e3cecd9f668992e76a5448afc09fd7b1030a/cpp/src/proactor_container_impl.cpp#L473]
>  at the same time.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to