diff --git a/fs/hmdfs/comm/transport.c b/fs/hmdfs/comm/transport.c index e6c6768f0ab7926af54be16dc89dc81bb2ae5f93..a68cf800c51a8b1665fa90af9206715605d088f5 100644 --- a/fs/hmdfs/comm/transport.c +++ b/fs/hmdfs/comm/transport.c @@ -850,11 +850,15 @@ static int tcp_send_message(struct connection *connect, void tcp_close_socket(struct tcp_handle *tcp) { + int ret; if (!tcp) return; mutex_lock(&tcp->close_mutex); if (tcp->recv_task) { - kthread_stop(tcp->recv_task); + ret = kthread_stop(tcp->recv_task); + /* recv_task killed before sched, we need to put the connect */ + if (ret == -EINTR) + connection_put(tcp->connect); tcp->recv_task = NULL; } mutex_unlock(&tcp->close_mutex);