Преглед на файлове

totemiba: Del channel fd from poll before destroy

Corosync freezes after several peer node connects/disconnects. The
freeze happens in recv_token_cq_recv_event_fn in ibv_get_cq_event call.
The problems is in fact, that after each peer node connect,
recv_token_accept_destroy is called, which tries to call
poll_dispatch_delete _after_ freeing of completion_channel. As
completion_channel contains fd, handlers are not disconnected from
poller properly. This leads to complete inconsistency in subsequent
calls to handlers.

Signed-off-by: Yevheniy Demchenko <zheka@uvt.cz>
Reviewed-by: Jan Friesse <jfriesse@redhat.com>
Yevheniy Demchenko преди 12 години
родител
ревизия
c5d4a0762f
променени са 1 файла, в които са добавени 8 реда и са изтрити 8 реда
  1. 8 8
      exec/totemiba.c

+ 8 - 8
exec/totemiba.c

@@ -622,6 +622,14 @@ static int recv_token_accept_destroy (struct totemiba_instance *instance)
 		return (0);
 		return (0);
 	}
 	}
 
 
+	qb_loop_poll_del (
+		instance->totemiba_poll_handle,
+		instance->recv_token_recv_completion_channel->fd);
+
+	qb_loop_poll_del (
+		instance->totemiba_poll_handle,
+		instance->recv_token_send_completion_channel->fd);
+
 	rdma_destroy_qp (instance->recv_token_cma_id);
 	rdma_destroy_qp (instance->recv_token_cma_id);
 
 
 	recv_token_recv_buf_post_destroy (instance);
 	recv_token_recv_buf_post_destroy (instance);
@@ -638,14 +646,6 @@ static int recv_token_accept_destroy (struct totemiba_instance *instance)
 
 
 	rdma_destroy_id (instance->recv_token_cma_id);
 	rdma_destroy_id (instance->recv_token_cma_id);
 
 
-	qb_loop_poll_del (
-		instance->totemiba_poll_handle,
-		instance->recv_token_recv_completion_channel->fd);
-
-	qb_loop_poll_del (
-		instance->totemiba_poll_handle,
-		instance->recv_token_send_completion_channel->fd);
-
 	return (0);
 	return (0);
 }
 }