Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
hiredis
Commits
74e78498
Unverified
Commit
74e78498
authored
Oct 18, 2020
by
Michael Grunder
Committed by
GitHub
Oct 18, 2020
Browse files
Merge pull request #888 from michael-grunder/nil-push-invalidation
Fix handling of NIL invalidation messages.
parents
acc91754
b9b9f446
Changes
2
Show whitespace changes
Inline
Side-by-side
hiredis.c
View file @
74e78498
...
...
@@ -257,7 +257,8 @@ static void *createNilObject(const redisReadTask *task) {
parent
=
task
->
parent
->
obj
;
assert
(
parent
->
type
==
REDIS_REPLY_ARRAY
||
parent
->
type
==
REDIS_REPLY_MAP
||
parent
->
type
==
REDIS_REPLY_SET
);
parent
->
type
==
REDIS_REPLY_SET
||
parent
->
type
==
REDIS_REPLY_PUSH
);
parent
->
element
[
task
->
idx
]
=
r
;
}
return
r
;
...
...
test.c
View file @
74e78498
...
...
@@ -53,6 +53,11 @@ struct privdata {
int
dtor_counter
;
};
struct
pushCounters
{
int
nil
;
int
str
;
};
#ifdef HIREDIS_TEST_SSL
redisSSLContext
*
_ssl_ctx
=
NULL
;
#endif
...
...
@@ -677,11 +682,25 @@ static void test_blocking_connection_errors(void) {
#endif
}
/* Dummy push handler */
void
push_handler
(
void
*
privdata
,
void
*
reply
)
{
int
*
counter
=
privdata
;
/* Test push handler */
void
push_handler
(
void
*
privdata
,
void
*
r
)
{
struct
pushCounters
*
pcounts
=
privdata
;
redisReply
*
reply
=
r
,
*
payload
;
assert
(
reply
&&
reply
->
type
==
REDIS_REPLY_PUSH
&&
reply
->
elements
==
2
);
payload
=
reply
->
element
[
1
];
if
(
payload
->
type
==
REDIS_REPLY_ARRAY
)
{
payload
=
payload
->
element
[
0
];
}
if
(
payload
->
type
==
REDIS_REPLY_STRING
)
{
pcounts
->
str
++
;
}
else
if
(
payload
->
type
==
REDIS_REPLY_NIL
)
{
pcounts
->
nil
++
;
}
freeReplyObject
(
reply
);
*
counter
+=
1
;
}
/* Dummy function just to test setting a callback with redisOptions */
...
...
@@ -691,16 +710,16 @@ void push_handler_async(redisAsyncContext *ac, void *reply) {
}
static
void
test_resp3_push_handler
(
redisContext
*
c
)
{
struct
pushCounters
pc
=
{
0
};
redisPushFn
*
old
=
NULL
;
redisReply
*
reply
;
void
*
privdata
;
int
n
=
0
;
/* Switch to RESP3 and turn on client tracking */
send_hello
(
c
,
3
);
send_client_tracking
(
c
,
"ON"
);
privdata
=
c
->
privdata
;
c
->
privdata
=
&
n
;
c
->
privdata
=
&
pc
;
reply
=
redisCommand
(
c
,
"GET key:0"
);
assert
(
reply
!=
NULL
);
...
...
@@ -717,7 +736,12 @@ static void test_resp3_push_handler(redisContext *c) {
old
=
redisSetPushCallback
(
c
,
push_handler
);
test
(
"We can set a custom RESP3 PUSH handler: "
);
reply
=
redisCommand
(
c
,
"SET key:0 val:0"
);
test_cond
(
reply
!=
NULL
&&
reply
->
type
==
REDIS_REPLY_STATUS
&&
n
==
1
);
test_cond
(
reply
!=
NULL
&&
reply
->
type
==
REDIS_REPLY_STATUS
&&
pc
.
str
==
1
);
freeReplyObject
(
reply
);
test
(
"We properly handle a NIL invalidation payload: "
);
reply
=
redisCommand
(
c
,
"FLUSHDB"
);
test_cond
(
reply
!=
NULL
&&
reply
->
type
==
REDIS_REPLY_STATUS
&&
pc
.
nil
==
1
);
freeReplyObject
(
reply
);
/* Unset the push callback and generate an invalidate message making
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment