Uploaded image for project: 'Qpid Dispatch'
  1. Qpid Dispatch
  2. DISPATCH-2320

TSAN: alloc sequence is non-atomic

Attach filesAttach ScreenshotAdd voteVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 1.18.0
    • None
    • Router Node
    • None

    Description

      While the stack below appears to be a double-free of a qd_message_t it is not (see qd_python_send - the message is not shared with a link).  The reason TSAN complains is that the sequence number contained in the memory pool item is not atomic.  In the trace below the message was freed to the pool then reclaimed for use by qd_python_send.  The fact that the sequence # was not synchronized is causing TSAN pain.

      Fix: make the sequence an atomic counter

       

      : WARNING: ThreadSanitizer: data race (pid=1889)                                                                                                                             
      :   Write of size 8 at 0x7b400000af00 by thread T2 (mutexes: write M13):                                                                                                     
      :     #0 qd_dealloc /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/alloc_pool.c:470 (qdrouterd+0x44b652)                                                    
      :     #1 free_qd_message_t /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/message.c:93 (qdrouterd+0x46e049)                                                 
      :     #2 qd_message_free /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/message.c:1128 (qdrouterd+0x46e049)                                                 
      :     #3 qd_python_send /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/python_embedded.c:798 (qdrouterd+0x4830a0)                                           
      :     #4 method_vectorcall_VARARGS <null> (libpython3.10.so.1.0+0x12ca80)                                                                                                    
      :     #5 qd_router_timer_handler /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_node.c:1622 (qdrouterd+0x4cf2dc)                                     
      :     #6 qd_timer_visit /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/timer.c:320 (qdrouterd+0x4dd7cf)                                                     
      :     #7 handle /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/server.c:1026 (qdrouterd+0x4d8a96)                                                           
      :     #8 thread_run /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/server.c:1141 (qdrouterd+0x4daeb7)                                                       
      :     #9 _thread_init /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/posix/threading.c:172 (qdrouterd+0x4812dd)                                             
      :                                                                                                                                                                            
      :   Previous read of size 8 at 0x7b400000af00 by main thread:                                                                                                                
      :     #0 qd_alloc_sequence /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/alloc_pool.c:514 (qdrouterd+0x44bef0)                                             
      :     #1 qd_alloc_deref_safe_ptr /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/include/qpid/dispatch/alloc_pool.h:102 (qdrouterd+0x45c033)                     
      :     #2 cleanup_link /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/container.c:350 (qdrouterd+0x45c033)                                                   
      :     #3 qd_link_free /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/container.c:997 (qdrouterd+0x45c1c9)                                                   
      :     #4 qd_link_free /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/container.c:988 (qdrouterd+0x45dd32)                                                   
      :     #5 AMQP_link_detach_handler /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_node.c:1158 (qdrouterd+0x4d38f1)                                    
      :     #6 AMQP_link_detach_handler /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_node.c:1107 (qdrouterd+0x4d38f1)                                    
      :     #7 close_links /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/container.c:328 (qdrouterd+0x45c2b9)                                                    
      :     #8 qd_container_handle_event /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/container.c:525 (qdrouterd+0x45f003)                                      
      :     #9 handle /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/server.c:1116 (qdrouterd+0x4d8b01)                                                           
      :     #10 thread_run /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/server.c:1141 (qdrouterd+0x4dadc4)                                                      
      :     #11 qd_server_run /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/server.c:1535 (qdrouterd+0x4dba1c)                                                   
      :     #12 main_process /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/router/src/main.c:115 (qdrouterd+0x426e5c)                                                
      :     #13 main /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/router/src/main.c:369 (qdrouterd+0x42626c)                                                        
      :                                                                                                                                                                            
      :   Location is heap block of size 256 at 0x7b400000af00 allocated by thread T1:                                                                                             
      :     #0 posix_memalign <null> (libtsan.so.0+0x32a23)                                                                                                                        
      :     #1 qd_alloc /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/alloc_pool.c:391 (qdrouterd+0x44ad29)                                                      
      :     #2 new_qd_message_t /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/message.c:93 (qdrouterd+0x470e7d)                                                  
      :     #3 qd_message_copy /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/message.c:1136 (qdrouterd+0x470e7d)                                                 
      :     #4 qdr_forward_new_delivery_CT /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_core/forwarder.c:153 (qdrouterd+0x4a64d7)                        
      :     #5 qdr_forward_multicast_CT /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_core/forwarder.c:497 (qdrouterd+0x4a9155)                           
      :     #6 qdr_forward_message_CT /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_core/forwarder.c:1122 (qdrouterd+0x4aab70)                            
      :     #7 qdr_in_process_send_to_CT /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_core/transfer.c:924 (qdrouterd+0x4bc7dd)                           
      :     #8 qdr_send_to_CT /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_core/transfer.c:899 (qdrouterd+0x4bc943)                                      
      :     #9 router_core_thread /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_core/router_core_thread.c:236 (qdrouterd+0x4b53fa)                        
      :     #10 _thread_init /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/posix/threading.c:172 (qdrouterd+0x4812dd)

      Attachments

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            kgiusti Ken Giusti

            Dates

              Created:
              Updated:

              Slack

                Issue deployment