From 64b08f383b7e22dfe5ddcc1bb706393b8cbe992d Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Sun, 19 May 2013 10:23:59 +1000 Subject: [PATCH] All stratum calls to recv_line are serialised from the one place so there is no need to use locking around recv(). --- util.c | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/util.c b/util.c index 79ed8566..07669e3f 100644 --- a/util.c +++ b/util.c @@ -1084,12 +1084,6 @@ static void recalloc_sock(struct pool *pool, size_t len) pool->sockbuf_size = new; } -enum recv_ret { - RECV_OK, - RECV_CLOSED, - RECV_RECVFAIL -}; - /* Peeks at a socket to find the first end of line and then reads just that * from the socket and returns that as a malloced char */ char *recv_line(struct pool *pool) @@ -1098,7 +1092,6 @@ char *recv_line(struct pool *pool) char *tok, *sret = NULL; if (!strstr(pool->sockbuf, "\n")) { - enum recv_ret ret = RECV_OK; struct timeval rstart, now; cgtime(&rstart); @@ -1107,7 +1100,6 @@ char *recv_line(struct pool *pool) goto out; } - mutex_lock(&pool->stratum_lock); do { char s[RBUFSIZE]; size_t slen; @@ -1116,12 +1108,12 @@ char *recv_line(struct pool *pool) memset(s, 0, RBUFSIZE); n = recv(pool->sock, s, RECVSIZE, 0); if (!n) { - ret = RECV_CLOSED; + applog(LOG_DEBUG, "Socket closed waiting in recv_line"); break; } if (n < 0) { if (!sock_blocks() || !socket_full(pool, false)) { - ret = RECV_RECVFAIL; + applog(LOG_DEBUG, "Failed to recv sock in recv_line"); break; } } else { @@ -1131,19 +1123,6 @@ char *recv_line(struct pool *pool) } cgtime(&now); } while (tdiff(&now, &rstart) < 60 && !strstr(pool->sockbuf, "\n")); - mutex_unlock(&pool->stratum_lock); - - switch (ret) { - default: - case RECV_OK: - break; - case RECV_CLOSED: - applog(LOG_DEBUG, "Socket closed waiting in recv_line"); - goto out; - case RECV_RECVFAIL: - applog(LOG_DEBUG, "Failed to recv sock in recv_line"); - goto out; - } } buflen = strlen(pool->sockbuf);