Commit 437eea80 authored by Pieter Noordhuis's avatar Pieter Noordhuis
Browse files

Make error ptr accessible from async context

parent 4e3bd789
......@@ -40,9 +40,18 @@ static redisAsyncContext *redisAsyncInitialize(redisContext *c) {
return ac;
}
/* We want the error field to be accessible directly instead of requiring
* an indirection to the redisContext struct. */
static void __redisAsyncCopyError(redisAsyncContext *ac) {
redisContext *c = &(ac->c);
if (c->error != NULL)
ac->error = c->error;
}
redisAsyncContext *redisAsyncConnect(const char *ip, int port) {
redisContext *c = redisConnectNonBlock(ip,port);
redisAsyncContext *ac = redisAsyncInitialize(c);
__redisAsyncCopyError(ac);
return ac;
}
......@@ -78,7 +87,8 @@ static void __redisAsyncDisconnect(redisAsyncContext *ac) {
if (ac->evCleanup) ac->evCleanup(ac->data);
/* Execute callback with proper status */
status = (c->error == NULL) ? REDIS_OK : REDIS_ERR;
__redisAsyncCopyError(ac);
status = (ac->error == NULL) ? REDIS_OK : REDIS_ERR;
if (ac->onDisconnect) ac->onDisconnect(ac,status);
/* Cleanup self */
......
......@@ -54,6 +54,9 @@ typedef struct redisAsyncContext {
/* Hold the regular context, so it can be realloc'ed. */
redisContext c;
/* Hold a reference to the error object so it can be used directly. */
char *error;
/* Called when the library expects to start reading/writing.
* The supplied functions should be idempotent. */
void (*evAddRead)(void *privdata);
......
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