]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/async/AsyncConnection: fix _conn_prefix racing when stopped
authorHaomai Wang <haomai@xsky.com>
Tue, 12 Jul 2016 17:26:04 +0000 (01:26 +0800)
committerHaomai Wang <haomai@xsky.com>
Tue, 16 Aug 2016 15:19:25 +0000 (23:19 +0800)
When the connection is lossy and enter fault, it will dispatch reset event.
If cleanup handler is executed as well as ms_handle_reset call mark_down,
it may exists racing for "cs". cleanup handler will reset "cs" but
_conn_prefix in mark_down will access "cs".

Signed-off-by: Haomai Wang <haomai@xsky.com>
src/msg/async/AsyncConnection.cc

index c682dd1158584ef1cef3692320eb4bf47fa30989..498cb03ff665ed7f73419bbd99e789f7ec4d2e8c 100644 (file)
@@ -28,7 +28,7 @@
 #undef dout_prefix
 #define dout_prefix _conn_prefix(_dout)
 ostream& AsyncConnection::_conn_prefix(std::ostream *_dout) {
-  int fd = cs ? cs.fd() : -1;
+  int fd = (cs && state != STATE_CLOSED) ? cs.fd() : -1;
   return *_dout << "-- " << async_msgr->get_myinst().addr << " >> " << peer_addr << " conn(" << this
                 << " sd=" << fd << " :" << port
                 << " s=" << get_state_name(state)