Added REDIS_NO_AUTO_FREE_REPLIES flag (#962)
When set hiredis will not automatically free replies in an async context, and the replies must be freed instead by the user. Co-authored-by: Michael Grunder <michael.grunder@gmail.com>
This commit is contained in:
parent
5850a8ecd2
commit
f5f31ff9b9
4
async.c
4
async.c
@ -569,7 +569,9 @@ void redisProcessCallbacks(redisAsyncContext *ac) {
|
|||||||
|
|
||||||
if (cb.fn != NULL) {
|
if (cb.fn != NULL) {
|
||||||
__redisRunCallback(ac,&cb,reply);
|
__redisRunCallback(ac,&cb,reply);
|
||||||
c->reader->fn->freeObject(reply);
|
if (!(c->flags & REDIS_NO_AUTO_FREE_REPLIES)){
|
||||||
|
c->reader->fn->freeObject(reply);
|
||||||
|
}
|
||||||
|
|
||||||
/* Proceed with free'ing when redisAsyncFree() was called. */
|
/* Proceed with free'ing when redisAsyncFree() was called. */
|
||||||
if (c->flags & REDIS_FREEING) {
|
if (c->flags & REDIS_FREEING) {
|
||||||
|
@ -804,6 +804,9 @@ redisContext *redisConnectWithOptions(const redisOptions *options) {
|
|||||||
if (options->options & REDIS_OPT_NOAUTOFREE) {
|
if (options->options & REDIS_OPT_NOAUTOFREE) {
|
||||||
c->flags |= REDIS_NO_AUTO_FREE;
|
c->flags |= REDIS_NO_AUTO_FREE;
|
||||||
}
|
}
|
||||||
|
if (options->options & REDIS_OPT_NOAUTOFREEREPLIES) {
|
||||||
|
c->flags |= REDIS_NO_AUTO_FREE_REPLIES;
|
||||||
|
}
|
||||||
|
|
||||||
/* Set any user supplied RESP3 PUSH handler or use freeReplyObject
|
/* Set any user supplied RESP3 PUSH handler or use freeReplyObject
|
||||||
* as a default unless specifically flagged that we don't want one. */
|
* as a default unless specifically flagged that we don't want one. */
|
||||||
|
@ -86,6 +86,9 @@ typedef long long ssize_t;
|
|||||||
*/
|
*/
|
||||||
#define REDIS_NO_AUTO_FREE 0x200
|
#define REDIS_NO_AUTO_FREE 0x200
|
||||||
|
|
||||||
|
/* Flag that indicates the user does not want replies to be automatically freed */
|
||||||
|
#define REDIS_NO_AUTO_FREE_REPLIES 0x400
|
||||||
|
|
||||||
#define REDIS_KEEPALIVE_INTERVAL 15 /* seconds */
|
#define REDIS_KEEPALIVE_INTERVAL 15 /* seconds */
|
||||||
|
|
||||||
/* number of times we retry to connect in the case of EADDRNOTAVAIL and
|
/* number of times we retry to connect in the case of EADDRNOTAVAIL and
|
||||||
@ -153,6 +156,11 @@ struct redisSsl;
|
|||||||
/* Don't automatically intercept and free RESP3 PUSH replies. */
|
/* Don't automatically intercept and free RESP3 PUSH replies. */
|
||||||
#define REDIS_OPT_NO_PUSH_AUTOFREE 0x08
|
#define REDIS_OPT_NO_PUSH_AUTOFREE 0x08
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Don't automatically free replies
|
||||||
|
*/
|
||||||
|
#define REDIS_OPT_NOAUTOFREEREPLIES 0x10
|
||||||
|
|
||||||
/* In Unix systems a file descriptor is a regular signed int, with -1
|
/* In Unix systems a file descriptor is a regular signed int, with -1
|
||||||
* representing an invalid descriptor. In Windows it is a SOCKET
|
* representing an invalid descriptor. In Windows it is a SOCKET
|
||||||
* (32- or 64-bit unsigned integer depending on the architecture), where
|
* (32- or 64-bit unsigned integer depending on the architecture), where
|
||||||
|
Loading…
x
Reference in New Issue
Block a user