summaryrefslogtreecommitdiff
path: root/net.h
diff options
context:
space:
mode:
authorMatt Stancliff <matt@genges.com>2014-04-07 11:57:26 -0400
committerMatt Stancliff <matt@genges.com>2014-04-08 19:37:29 -0400
commit7f0c7a29fd4d0f0623db522501c2b66eb8ebb94d (patch)
treeca854df2a7c310395354fe9327da16cc335893a6 /net.h
parent065e90557c2f2bce6205c5006144bec75638836f (diff)
Remove possiblity of multiple close on same fd
With all the async connects and disconnects and error handling going on in hiredis, we need to centralize how we close our fd and set it so it doesn't get re-closed. Prior to this commit, sometimes we'd close(fd), run an async error handler, then call close(fd) again. To stop multiple closes, we now set fd to -1 after we free it, but that requires not passing fd as an independent argument to functions. This commit moves all fd usage to c->fd. Since the context has a fd field and all functions receive the context, it makes more sense to use the fd inside of c instead of passing along fd as an independent argument. Also, by only using c->fd, we can set c->fd after we close it to signify we shouldn't re-close the same fd again. This does change one semi-public interface function redisCheckSocketError() to only take (context) instead of (context, fd). A search on github returned zero occasions of people using redisCheckSocketError() outside of net.{c,h} in hiredis itself. Commit inspired by the bug report at: https://groups.google.com/forum/#!topic/redis-db/mQm46XkIPOY Thanks go out to Thijs for trying high-frequency reconnects on a host that isn't there. Closes #230
Diffstat (limited to 'net.h')
-rw-r--r--net.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/net.h b/net.h
index 94b76f5..af7da11 100644
--- a/net.h
+++ b/net.h
@@ -39,7 +39,7 @@
#define AF_LOCAL AF_UNIX
#endif
-int redisCheckSocketError(redisContext *c, int fd);
+int redisCheckSocketError(redisContext *c);
int redisContextSetTimeout(redisContext *c, const struct timeval tv);
int redisContextConnectTcp(redisContext *c, const char *addr, int port, const struct timeval *timeout);
int redisContextConnectUnix(redisContext *c, const char *path, const struct timeval *timeout);