Description
The router will crash if it receives a connection from a console and then the console disconnects.
To reproduce:
- dnf install qpid-dispatch-router
- dnf install qpid-dispatch-tools
- create a config file with an http listener named A.conf that contains:
router { mode: standalone id: A }listener
{ port: 5673 host: 0.0.0.0 http: true saslMechanisms: ANONYMOUS name: Console Listener } - start the router
$ qdrouterd --config <path/to/>A.conf
- connect a console: browse to localhost:5673
- close the browser window
- the router crashes
Here is the output from the router:
qdrouterd --config /usr/local/etc/qpid-dispatch/A.conf
2017-10-10 13:37:20.279849 -0400 SERVER (info) Container Name: A
2017-10-10 13:37:20.279926 -0400 ROUTER (info) Router started in Standalone mode
2017-10-10 13:37:20.280273 -0400 ROUTER_CORE (info) Router Core thread running. 0/A
2017-10-10 13:37:20.280290 -0400 ROUTER_CORE (info) In-process subscription M/$management
2017-10-10 13:37:20.333194 -0400 AGENT (info) Activating management agent on $_management_internal
2017-10-10 13:37:20.333276 -0400 ROUTER_CORE (info) In-process subscription L/$management
2017-10-10 13:37:20.333310 -0400 ROUTER_CORE (info) In-process subscription L/$_management_internal
2017-10-10 13:37:20.333608 -0400 CONN_MGR (info) Configured Listener: localhost:5673 proto=any, role=normal, http
2017-10-10 13:37:20.333725 -0400 SERVER (info) HTTP server thread running
2017-10-10 13:37:20.333825 -0400 SERVER (notice) Listening for HTTP on localhost:5673
2017-10-10 13:37:20.336628 -0400 POLICY (info) Policy configured maxConnections: 65535, policyDir: '', access rules enabled: 'false'
2017-10-10 13:37:20.341923 -0400 POLICY (info) Policy fallback defaultVhost is defined: '$default'
2017-10-10 13:37:20.342088 -0400 SERVER (info) Operational, 4 Threads Running
2017-10-10 13:37:57.114258 -0400 CONTAINER (notice) Aborting link '68c3979a-9bdf-7e4e-b578-ecfcd8925acb' due to parent connection end
2017-10-10 13:37:57.114304 -0400 CONTAINER (notice) Aborting link '5ec6b95c-3885-984e-995d-297f2841ca02' due to parent connection end
Segmentation fault (core dumped)
Here is a backtrace:
(gdb) bt
#0 0x0000000000000010 in ?? ()
#1 0x00007ffff79379fe in pn_class_decref (clazz=0x7fffe4019b60,
clazz@entry=0x7ffff7b6ec00 <PN_OBJECT>, object=0x7fffe4019b40)
at /usr/src/debug/qpid-proton-0.17.0/proton-c/src/core/object/object.c:91
#2 0x00007ffff7937c2f in pn_decref (object=<optimized out>)
at /usr/src/debug/qpid-proton-0.17.0/proton-c/src/core/object/object.c:253
#3 0x00007ffff7944732 in pn_collector_free (collector=<optimized out>)
at /usr/src/debug/qpid-proton-0.17.0/proton-c/src/core/event.c:108
#4 0x00007ffff7bb6bcc in qd_connection_free (ctx=0x7fffe400c290)
at /usr/src/debug/qpid-dispatch-0.8.0/src/server.c:169
#5 0x00007ffff7bbaa21 in callback_amqpws (wsi=0x7fffe400a640,
reason=<optimized out>, user=0x7fffe400a850, in=0x0, len=0)
at /usr/src/debug/qpid-dispatch-0.8.0/src/http-libwebsockets.c:496
#6 0x00007ffff6cffe6c in lws_close_free_wsi (wsi=wsi@entry=0x7fffe400a640,
reason=reason@entry=LWS_CLOSE_STATUS_NOSTATUS)
at /usr/src/debug/libwebsockets-2.1.1/lib/libwebsockets.c:518
#7 0x00007ffff6d0179e in lws_service_fd_tsi (
context=context@entry=0x5555559e08d0, pollfd=<optimized out>,
tsi=tsi@entry=0) at /usr/src/debug/libwebsockets-2.1.1/lib/service.c:1117
#8 0x00007ffff6d0bc73 in lws_plat_service_tsi (context=0x5555559e08d0,
timeout_ms=<optimized out>, tsi=tsi@entry=0)
at /usr/src/debug/libwebsockets-2.1.1/lib/lws-plat-unix.c:184
#9 0x00007ffff6d0be47 in lws_plat_service (context=<optimized out>,
timeout_ms=<optimized out>)
at /usr/src/debug/libwebsockets-2.1.1/lib/lws-plat-unix.c:204
#10 0x00007ffff6d01d55 in lws_service (context=<optimized out>,
timeout_ms=<optimized out>)
at /usr/src/debug/libwebsockets-2.1.1/lib/service.c:1139
#11 0x00007ffff7bbb76c in http_thread_run (v=0x5555559f45f0)
at /usr/src/debug/qpid-dispatch-0.8.0/src/http-libwebsockets.c:536
#12 0x00007ffff770e6ca in start_thread () from /lib64/libpthread.so.0
#13 0x00007ffff6a39f7f in clone () from /lib64/libc.so.6
Notes:
$ rpm -qa | grep dispatch
qpid-dispatch-debuginfo-0.8.0-2.fc25.x86_64
qpid-dispatch-tools-0.8.0-2.fc25.x86_64
qpid-dispatch-router-0.8.0-2.fc25.x86_64
$ rpm -qa | grep proton
python-qpid-proton-0.17.0-5.fc25.x86_64
qpid-proton-c-0.17.0-5.fc25.x86_64
qpid-proton-debuginfo-0.17.0-5.fc25.x86_64
router was started from root account
I can't reproduce from a source build, only from 0.8.0 packages