Make error ptr accessible from async context
This commit is contained in:
parent
4e3bd7893d
commit
437eea80fc
12
async.c
12
async.c
@ -40,9 +40,18 @@ static redisAsyncContext *redisAsyncInitialize(redisContext *c) {
|
|||||||
return ac;
|
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) {
|
redisAsyncContext *redisAsyncConnect(const char *ip, int port) {
|
||||||
redisContext *c = redisConnectNonBlock(ip,port);
|
redisContext *c = redisConnectNonBlock(ip,port);
|
||||||
redisAsyncContext *ac = redisAsyncInitialize(c);
|
redisAsyncContext *ac = redisAsyncInitialize(c);
|
||||||
|
__redisAsyncCopyError(ac);
|
||||||
return ac;
|
return ac;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,7 +87,8 @@ static void __redisAsyncDisconnect(redisAsyncContext *ac) {
|
|||||||
if (ac->evCleanup) ac->evCleanup(ac->data);
|
if (ac->evCleanup) ac->evCleanup(ac->data);
|
||||||
|
|
||||||
/* Execute callback with proper status */
|
/* 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);
|
if (ac->onDisconnect) ac->onDisconnect(ac,status);
|
||||||
|
|
||||||
/* Cleanup self */
|
/* Cleanup self */
|
||||||
|
3
async.h
3
async.h
@ -54,6 +54,9 @@ typedef struct redisAsyncContext {
|
|||||||
/* Hold the regular context, so it can be realloc'ed. */
|
/* Hold the regular context, so it can be realloc'ed. */
|
||||||
redisContext c;
|
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.
|
/* Called when the library expects to start reading/writing.
|
||||||
* The supplied functions should be idempotent. */
|
* The supplied functions should be idempotent. */
|
||||||
void (*evAddRead)(void *privdata);
|
void (*evAddRead)(void *privdata);
|
||||||
|
Loading…
Reference in New Issue
Block a user