diff options
author | Frederic Robra | 2019-11-06 20:23:47 +0100 |
---|---|---|
committer | Frederic Robra | 2019-11-06 20:23:47 +0100 |
commit | ec6c0ce8b1af8d9c36f4ec87cd384365cb2d9012 (patch) | |
tree | fd62ba871ee3383a6f139207977f92b103bb198e /src/kernel/net.c | |
parent | added comments (diff) | |
download | dnbd3-ng-ec6c0ce8b1af8d9c36f4ec87cd384365cb2d9012.tar.gz dnbd3-ng-ec6c0ce8b1af8d9c36f4ec87cd384365cb2d9012.tar.xz dnbd3-ng-ec6c0ce8b1af8d9c36f4ec87cd384365cb2d9012.zip |
removed bug when sending and at the same time socket closes down
Diffstat (limited to 'src/kernel/net.c')
-rw-r--r-- | src/kernel/net.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/kernel/net.c b/src/kernel/net.c index a837702..801c15c 100644 --- a/src/kernel/net.c +++ b/src/kernel/net.c @@ -81,10 +81,9 @@ static void dnbd3_timer(struct timer_list *arg) } /* start after 2 seconds */ - if (dev->timer_count % TIMER_INTERVAL_PROBE_NORMAL == 2) { + if (!busy && dev->timer_count % TIMER_INTERVAL_PROBE_NORMAL == 2) { queue_work(dnbd3_wq, &dev->discovery_worker); } - dev->timer_count++; dev->timer.expires = jiffies + HZ; add_timer(&dev->timer); @@ -108,11 +107,9 @@ static void dnbd3_receive_worker(struct work_struct *work) result = dnbd3_receive_cmd(sock, &reply); if (result == -EAGAIN) { continue; - } else if (result <= 0) { error_sock(sock, "connection to server lost %d", result); goto error; - } switch (reply.cmd) { @@ -162,6 +159,10 @@ static void dnbd3_receive_worker(struct work_struct *work) error: if (result == 0) { info_sock(sock, "result is 0, socket seems to be down"); + /* be sure nobody is sending on the socket */ + while (unlikely(sock->pending)) { + msleep(50); + } dnbd3_sock_release(sock); break; } else if (result < 0) { |