Clear just the socket buffer when we don't care what is left in a stratum socket.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
diff --git a/util.c b/util.c
index 62a50da..dfbfc93 100644
--- a/util.c
+++ b/util.c
@@ -981,16 +981,22 @@ bool sock_full(struct pool *pool)
return (socket_full(pool, false));
}
+static void clear_sockbuf(struct pool *pool)
+{
+ strcpy(pool->sockbuf, "");
+}
+
static void clear_sock(struct pool *pool)
{
ssize_t n;
mutex_lock(&pool->stratum_lock);
- do
+ do {
n = recv(pool->sock, pool->sockbuf, RECVSIZE, 0);
- while (n > 0);
+ } while (n > 0);
mutex_unlock(&pool->stratum_lock);
- strcpy(pool->sockbuf, "");
+
+ clear_sockbuf(pool);
}
/* Make sure the pool sockbuf is large enough to cope with any coinbase size
@@ -1506,7 +1512,7 @@ out:
void suspend_stratum(struct pool *pool)
{
- clear_sock(pool);
+ clear_sockbuf(pool);
applog(LOG_INFO, "Closing socket for stratum pool %d", pool->pool_no);
mutex_lock(&pool->stratum_lock);
pool->stratum_active = pool->stratum_notify = false;