From 489f4b6fe496d8bdb34784291b3d08d17cace29e Mon Sep 17 00:00:00 2001 From: Johann Latocha Date: Wed, 22 Feb 2012 23:29:45 +0100 Subject: [KERNEL] One more KP fixed --- src/kernel/net.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'src/kernel') diff --git a/src/kernel/net.c b/src/kernel/net.c index e331177..74cd500 100644 --- a/src/kernel/net.c +++ b/src/kernel/net.c @@ -120,22 +120,29 @@ void dnbd3_net_disconnect(dnbd3_device_t *dev) // kill sending and receiving threads if (dev->thread_send) + { kthread_stop(dev->thread_send); + dev->thread_send = NULL; + } if (dev->thread_receive) + { kthread_stop(dev->thread_receive); + dev->thread_receive = NULL; + } if (dev->thread_discover) + { kthread_stop(dev->thread_discover); + dev->thread_discover = NULL; + } // clear socket if (dev->cur_server.sock) + { sock_release(dev->cur_server.sock); - - dev->thread_send = NULL; - dev->thread_receive = NULL; - dev->thread_discover = NULL; - dev->cur_server.sock = NULL; + dev->cur_server.sock = NULL; + } } void dnbd3_net_heartbeat(unsigned long arg) @@ -317,9 +324,9 @@ int dnbd3_net_discover(void *data) continue; // take server with lowest rtt - if (num > 1 && strcmp(dev->cur_server.host, best_server)) + if (num > 1 && strcmp(dev->cur_server.host, best_server) && !kthread_should_stop()) { - printk("INFO: Server %s on %s is faster (%lluus), switching\n", best_server, dev->disk->disk_name, best_rtt); + printk("INFO: Server %s on %s is faster (%lluus)\n", best_server, dev->disk->disk_name, best_rtt); kfree(buf); dev->thread_discover = NULL; dnbd3_net_disconnect(dev); -- cgit v1.2.3-55-g7522