Commit e3067fe2 authored by Pieter Noordhuis's avatar Pieter Noordhuis
Browse files

Actively disconnect on an error

This calls the disconnect callback, causing the registered event
handlers to be cleared. After this, the error callback will be called,
knowing that events will no longer be fired.
parent 94761286
......@@ -17,9 +17,11 @@ void libevRedisReadEvent(struct ev_loop *loop, ev_io *watcher, int revents) {
libevRedisEvents *e = watcher->data;
if (redisBufferRead(e->context) == REDIS_ERR) {
redisDisconnect(e->context);
e->err(e->context);
} else {
if (redisProcessCallbacks(e->context) == REDIS_ERR) {
redisDisconnect(e->context);
e->err(e->context);
}
}
......@@ -31,7 +33,7 @@ void libevRedisWriteEvent(struct ev_loop *loop, ev_io *watcher, int revents) {
int done = 0;
if (redisBufferWrite(e->context, &done) == REDIS_ERR) {
ev_io_stop(e->loop,&e->wev);
redisDisconnect(e->context);
e->err(e->context);
} else {
/* Stop firing the write event when done */
......
......@@ -19,9 +19,11 @@ void libeventRedisReadEvent(int fd, short event, void *arg) {
event_add(&e->rev,NULL);
if (redisBufferRead(e->context) == REDIS_ERR) {
redisDisconnect(e->context);
e->err(e->context);
} else {
if (redisProcessCallbacks(e->context) == REDIS_ERR) {
redisDisconnect(e->context);
e->err(e->context);
}
}
......@@ -33,7 +35,7 @@ void libeventRedisWriteEvent(int fd, short event, void *arg) {
int done = 0;
if (redisBufferWrite(e->context,&done) == REDIS_ERR) {
/* Handle error */
redisDisconnect(e->context);
e->err(e->context);
} else {
/* Schedule write event again when writing is not done. */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment