All stratum calls to recv_line are serialised from the one place so there is no need to use locking around recv().
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
diff --git a/util.c b/util.c
index 79ed856..07669e3 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);