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

Router crash during shutdown in system_tests_distribution

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.0.1
    • 1.1.0
    • Tests
    • None

    Description

      The router crashes during shutdown in system_tests_distribution.py

      Here is the backtrace

       

      (gdb) bt
      #0  0x00007f361ca5ae40 in pn_ep_decref (endpoint=0x7f35f01c2dd0) at /home/gmurthy/opensource/qpid-proton-0.22.0/proton-c/src/core/engine.c:447
      #1  0x00007f361ca5b58b in pn_ep_decref (endpoint=<optimized out>) at /home/gmurthy/opensource/qpid-proton-0.22.0/proton-c/src/core/engine.c:445
      #2  0x00007f361ca5f588 in pni_transport_unbind_handles (handles=0x7f35f00764a0, reset_state=reset_state@entry=true) at /home/gmurthy/opensource/qpid-proton-0.22.0/proton-c/src/core/transport.c:748
      #3  0x00007f361ca5f666 in pni_transport_unbind_channels (channels=0x9d1ce0) at /home/gmurthy/opensource/qpid-proton-0.22.0/proton-c/src/core/transport.c:761
      #4  0x00007f361ca5f777 in pn_transport_unbind (transport=0xa863d0) at /home/gmurthy/opensource/qpid-proton-0.22.0/proton-c/src/core/transport.c:795
      #5  0x00007f361ca5a63e in pn_connection_driver_release_connection (d=d@entry=0xa86248) at /home/gmurthy/opensource/qpid-proton-0.22.0/proton-c/src/core/connection_driver.c:81
      #6  0x00007f361ca5a679 in pn_connection_driver_destroy (d=d@entry=0xa86248) at /home/gmurthy/opensource/qpid-proton-0.22.0/proton-c/src/core/connection_driver.c:92
      #7  0x00007f361c83a69c in pconnection_final_free (pc=0xa85ca0) at /home/gmurthy/opensource/qpid-proton-0.22.0/proton-c/src/proactor/epoll.c:827
      #8  0x00007f361c83b3ac in pconnection_cleanup (pc=<optimized out>) at /home/gmurthy/opensource/qpid-proton-0.22.0/proton-c/src/proactor/epoll.c:843
      #9  0x00007f361c83db37 in pconnection_forced_shutdown (pc=0xa85ca0) at /home/gmurthy/opensource/qpid-proton-0.22.0/proton-c/src/proactor/epoll.c:878
      #10 pn_proactor_free (p=0x916fd0) at /home/gmurthy/opensource/qpid-proton-0.22.0/proton-c/src/proactor/epoll.c:1815
      #11 0x00007f361cce7bb5 in qd_server_free (qd_server=0x919190) at /home/gmurthy/opensource/qpid-dispatch/src/server.c:1176
      #12 0x00007f361cca878e in qd_dispatch_free (qd=0x6164b0) at /home/gmurthy/opensource/qpid-dispatch/src/dispatch.c:318
      #13 0x0000000000401864 in main_process (config_path=0x7ffcb36d88e2 "B.conf", python_pkgdir=0x7ffcb36d88ec "/home/gmurthy/opensource/qpid-dispatch/python", fd=2) at /home/gmurthy/opensource/qpid-dispatch/router/src/main.c:116
      #14 0x00000000004022b0 in main (argc=5, argv=0x7ffcb36d8158) at /home/gmurthy/opensource/qpid-dispatch/router/src/main.c:360
      (gdb)

       

      Running the test under valgrind, it seems that the pn_proactor_free is trying to free already freed link endpoint. Here are two outputs from valgrind

       

      Process 3493 error: exit code 42, expected 0
      qdrouterd -c B.conf -I /home/gmurthy/opensource/qpid-dispatch/python
      /home/gmurthy/opensource/qpid-dispatch/build/system_test.dir/system_tests_distribution/DistributionTests/setUpClass/B-2.cmd
      >>>>
      ==3493== Invalid write of size 8
      ==3493==    at 0x50E82B0: pn_link_unbound (engine.c:1202)
      ==3493==    by 0x50EB5D0: pni_transport_unbind_handles (transport.c:746)
      ==3493==    by 0x50EB665: pni_transport_unbind_channels (transport.c:761)
      ==3493==    by 0x50EB776: pn_transport_unbind (transport.c:795)
      ==3493==    by 0x50E663D: pn_connection_driver_release_connection (connection_driver.c:81)
      ==3493==    by 0x50E6678: pn_connection_driver_destroy (connection_driver.c:92)
      ==3493==    by 0x530A69B: pconnection_final_free (epoll.c:827)
      ==3493==    by 0x530DB36: pconnection_forced_shutdown (epoll.c:878)
      ==3493==    by 0x530DB36: pn_proactor_free (epoll.c:1815)
      ==3493==    by 0x4EA5BB4: qd_server_free (server.c:1176)
      ==3493==    by 0x4E6678D: qd_dispatch_free (dispatch.c:318)
      ==3493==    by 0x401863: main_process (main.c:116)
      ==3493==    by 0x4022AF: main (main.c:360)
      ==3493==  Address 0x15c06188 is 376 bytes inside a block of size 488 free'd
      ==3493==    at 0x4C2DD18: free (vg_replace_malloc.c:530)
      ==3493==    by 0x50DD938: pn_class_decref (object.c:101)
      ==3493==    by 0x50EA03F: pn_event_finalize (event.c:226)
      ==3493==    by 0x50EA03F: pn_event_finalize_cast (event.c:271)
      ==3493==    by 0x50DD928: pn_class_decref (object.c:95)
      ==3493==    by 0x50EA361: pn_collector_next (event.c:197)
      ==3493==    by 0x50E6408: batch_next (connection_driver.c:51)
      ==3493==    by 0x530C544: pconnection_batch_next (epoll.c:884)
      ==3493==    by 0x4EA50F2: thread_run (server.c:957)
      ==3493==    by 0x551950A: start_thread (in /usr/lib64/libpthread-2.26.so)
      ==3493==    by 0x629916E: clone (in /usr/lib64/libc-2.26.so)
      ==3493==  Block was alloc'd at
      ==3493==    at 0x4C2EA1E: calloc (vg_replace_malloc.c:711)
      ==3493==    by 0x50DD811: pn_object_new (object.c:202)
      ==3493==    by 0x50DD88B: pn_class_new (object.c:61)
      ==3493==    by 0x50E8163: pn_link_new (engine.c:1153)
      ==3493==    by 0x50ED3C4: pn_do_attach (transport.c:1366)
      ==3493==    by 0x50E6227: pni_dispatch_action (dispatcher.c:74)
      ==3493==    by 0x50E6227: pni_dispatch_frame (dispatcher.c:116)
      ==3493==    by 0x50E6227: pn_dispatcher_input (dispatcher.c:135)
      ==3493==    by 0x50EC96B: pn_input_read_amqp (transport.c:2561)
      ==3493==    by 0x50ECA17: transport_consume (transport.c:1817)
      ==3493==    by 0x50F0135: pn_transport_process (transport.c:2946)
      ==3493==    by 0x530C43F: pconnection_process (epoll.c:1128)
      ==3493==    by 0x530C9EA: proactor_do_epoll (epoll.c:2010)
      ==3493==    by 0x4EA50C4: thread_run (server.c:955)
      
      
      

       

      ==3488== Invalid read of size 8
      ==3488==    at 0x50E6E11: pni_ep_get_connection (engine.c:50)
      ==3488==    by 0x50E6E11: pn_ep_decref.part.10 (engine.c:446)
      ==3488==    by 0x50EB587: pni_transport_unbind_handles (transport.c:748)
      ==3488==    by 0x50EB665: pni_transport_unbind_channels (transport.c:761)
      ==3488==    by 0x50EB776: pn_transport_unbind (transport.c:795)
      ==3488==    by 0x50E663D: pn_connection_driver_release_connection (connection_driver.c:81)
      ==3488==    by 0x50E6678: pn_connection_driver_destroy (connection_driver.c:92)
      ==3488==    by 0x530A69B: pconnection_final_free (epoll.c:827)
      ==3488==    by 0x530DF4A: pconnection_done (epoll.c:964)
      ==3488==    by 0x530DF4A: pn_proactor_done (epoll.c:2038)
      ==3488==    by 0x4EA5114: thread_run (server.c:960)
      ==3488==    by 0x551950A: start_thread (in /usr/lib64/libpthread-2.26.so)
      ==3488==    by 0x629916E: clone (in /usr/lib64/libc-2.26.so)
      ==3488==  Address 0x127e15d0 is 400 bytes inside a block of size 488 free'd
      ==3488==    at 0x4C2DD18: free (vg_replace_malloc.c:530)
      ==3488==    by 0x50DD938: pn_class_decref (object.c:101)
      ==3488==    by 0x50EA03F: pn_event_finalize (event.c:226)
      ==3488==    by 0x50EA03F: pn_event_finalize_cast (event.c:271)
      ==3488==    by 0x50DD928: pn_class_decref (object.c:95)
      ==3488==    by 0x50EA361: pn_collector_next (event.c:197)
      ==3488==    by 0x50E6408: batch_next (connection_driver.c:51)
      ==3488==    by 0x530C544: pconnection_batch_next (epoll.c:884)
      ==3488==    by 0x4EA50F2: thread_run (server.c:957)
      ==3488==    by 0x551950A: start_thread (in /usr/lib64/libpthread-2.26.so)
      ==3488==    by 0x629916E: clone (in /usr/lib64/libc-2.26.so)
      ==3488==  Block was alloc'd at
      ==3488==    at 0x4C2EA1E: calloc (vg_replace_malloc.c:711)
      ==3488==    by 0x50DD811: pn_object_new (object.c:202)
      ==3488==    by 0x50DD88B: pn_class_new (object.c:61)
      ==3488==    by 0x50E8163: pn_link_new (engine.c:1153)
      ==3488==    by 0x50ED3C4: pn_do_attach (transport.c:1366)
      ==3488==    by 0x50E6227: pni_dispatch_action (dispatcher.c:74)
      ==3488==    by 0x50E6227: pni_dispatch_frame (dispatcher.c:116)
      ==3488==    by 0x50E6227: pn_dispatcher_input (dispatcher.c:135)
      ==3488==    by 0x50EC96B: pn_input_read_amqp (transport.c:2561)
      ==3488==    by 0x50ECA17: transport_consume (transport.c:1817)
      ==3488==    by 0x50F0135: pn_transport_process (transport.c:2946)
      ==3488==    by 0x530C43F: pconnection_process (epoll.c:1128)
      ==3488==    by 0x530C9EA: proactor_do_epoll (epoll.c:2010)
      ==3488==    by 0x4EA50C4: thread_run (server.c:955)
      

       

      Attachments

        Issue Links

          Activity

            People

              gmurthy Ganesh Murthy
              gmurthy Ganesh Murthy
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: