diff --git a/src/client/msgr_stop.cpp b/src/client/msgr_stop.cpp index 3de5c588..b4c78a94 100644 --- a/src/client/msgr_stop.cpp +++ b/src/client/msgr_stop.cpp @@ -72,8 +72,12 @@ void osd_messenger_t::stop_client(int peer_fd, bool force, bool force_delete) cl->peer_state = PEER_STOPPED; if (cl->osd_num) { - // ...and forget OSD peer - osd_peer_fds.erase(cl->osd_num); + auto osd_it = osd_peer_fds.find(cl->osd_num); + if (osd_it != osd_peer_fds.end() && osd_it->second == cl->peer_fd) + { + // ...and forget OSD peer + osd_peer_fds.erase(osd_it); + } } #ifndef __MOCK__ // Then remove FD from the eventloop so we don't accidentally read something diff --git a/src/test/test_cluster_client.cpp b/src/test/test_cluster_client.cpp index 846098c7..e3fd91e3 100644 --- a/src/test/test_cluster_client.cpp +++ b/src/test/test_cluster_client.cpp @@ -121,6 +121,7 @@ void pretend_connected(cluster_client_t *cli, osd_num_t osd_num) cli->msgr.osd_peer_fds[osd_num] = peer_fd; cli->msgr.clients[peer_fd] = new osd_client_t(); cli->msgr.clients[peer_fd]->osd_num = osd_num; + cli->msgr.clients[peer_fd]->peer_fd = peer_fd; cli->msgr.clients[peer_fd]->peer_state = PEER_CONNECTED; cli->msgr.wanted_peers.erase(osd_num); cli->msgr.repeer_pgs(osd_num);