Fix subscribe leak.

master
Nicolas Favre-Felix 14 years ago
parent 3e63a076a3
commit 9378544d19

@ -77,7 +77,7 @@ http_client_read(int fd, short event, void *ctx) {
http_client_free(c); http_client_free(c);
break; break;
default: default: /* CLIENT_EXECUTING */
break; break;
} }
} }
@ -129,8 +129,8 @@ http_client_free(struct http_client *c) {
close(c->fd); close(c->fd);
if(c->sub) { if(c->sub) {
/* clean up redis object */ /* clean up Redis connection */
redisAsyncFree(c->sub->s->ac); server_free(c->sub->s);
/* clean up command object */ /* clean up command object */
if(c->sub->cmd) { if(c->sub->cmd) {

@ -240,12 +240,6 @@ cmd_select_format(struct http_client *client, struct cmd *cmd,
int int
cmd_is_subscribe(struct cmd *cmd) { cmd_is_subscribe(struct cmd *cmd) {
/*
if(cmd->started_responding) {
return 1;
}
*/
if(cmd->count >= 1 && if(cmd->count >= 1 &&
(strncasecmp(cmd->argv[0], "SUBSCRIBE", cmd->argv_len[0]) == 0 || (strncasecmp(cmd->argv[0], "SUBSCRIBE", cmd->argv_len[0]) == 0 ||
strncasecmp(cmd->argv[0], "PSUBSCRIBE", cmd->argv_len[0]) == 0)) { strncasecmp(cmd->argv[0], "PSUBSCRIBE", cmd->argv_len[0]) == 0)) {

@ -84,6 +84,18 @@ server_new(const char *filename) {
return s; return s;
} }
void
server_free(struct server *s) {
/* cleanup Redis async object, _before_ the 2 struct event. */
redisAsyncFree(s->ac);
event_del(&s->ev);
event_del(&s->ev_reconnect);
free(s);
}
static void static void
connectCallback(const redisAsyncContext *c) { connectCallback(const redisAsyncContext *c) {
((void)c); ((void)c);

@ -26,6 +26,9 @@ webdis_connect(struct server *s);
struct server * struct server *
server_new(const char *filename); server_new(const char *filename);
void
server_free(struct server *s);
struct server * struct server *
server_copy(const struct server *s); server_copy(const struct server *s);

Loading…
Cancel
Save