Ignore pubsub replies without a channel/pattern
This commit is contained in:
parent
f8de9a4bd4
commit
b6fb548fc6
4
async.c
4
async.c
@ -431,8 +431,10 @@ static int __redisGetSubscribeCallback(redisAsyncContext *ac, redisReply *reply,
|
|||||||
else
|
else
|
||||||
callbacks = ac->sub.channels;
|
callbacks = ac->sub.channels;
|
||||||
|
|
||||||
|
/* Ignore replies without a channel/pattern string */
|
||||||
|
if (reply->element[1]->type != REDIS_REPLY_STRING) return REDIS_OK;
|
||||||
|
|
||||||
/* Locate the right callback */
|
/* Locate the right callback */
|
||||||
assert(reply->element[1]->type == REDIS_REPLY_STRING);
|
|
||||||
sname = sdsnewlen(reply->element[1]->str,reply->element[1]->len);
|
sname = sdsnewlen(reply->element[1]->str,reply->element[1]->len);
|
||||||
if (sname == NULL)
|
if (sname == NULL)
|
||||||
goto oom;
|
goto oom;
|
||||||
|
6
test.c
6
test.c
@ -1733,6 +1733,10 @@ void subscribe_channel_a_cb(redisAsyncContext *ac, void *r, void *privdata) {
|
|||||||
redisAsyncCommand(ac,unexpected_cb,
|
redisAsyncCommand(ac,unexpected_cb,
|
||||||
(void*)"unsubscribe should not call unexpected_cb()",
|
(void*)"unsubscribe should not call unexpected_cb()",
|
||||||
"unsubscribe B X A");
|
"unsubscribe B X A");
|
||||||
|
/* Unsubscribe to patterns, none which we subscribe to */
|
||||||
|
redisAsyncCommand(ac,unexpected_cb,
|
||||||
|
(void*)"punsubscribe should not call unexpected_cb()",
|
||||||
|
"punsubscribe");
|
||||||
/* Send a regular command after unsubscribing, then disconnect */
|
/* Send a regular command after unsubscribing, then disconnect */
|
||||||
state->disconnect = 1;
|
state->disconnect = 1;
|
||||||
redisAsyncCommand(ac,integer_cb,state,"LPUSH mylist foo");
|
redisAsyncCommand(ac,integer_cb,state,"LPUSH mylist foo");
|
||||||
@ -1769,6 +1773,8 @@ void subscribe_channel_b_cb(redisAsyncContext *ac, void *r, void *privdata) {
|
|||||||
* - subscribe to channel A and B
|
* - subscribe to channel A and B
|
||||||
* - a published message on A triggers an unsubscribe of channel B, X and A
|
* - a published message on A triggers an unsubscribe of channel B, X and A
|
||||||
* where channel X is not subscribed to.
|
* where channel X is not subscribed to.
|
||||||
|
* - the published message also triggers an unsubscribe to patterns. Since no
|
||||||
|
* pattern is subscribed to the responded pattern element type is NIL.
|
||||||
* - a command sent after unsubscribe triggers a disconnect */
|
* - a command sent after unsubscribe triggers a disconnect */
|
||||||
static void test_pubsub_multiple_channels(struct config config) {
|
static void test_pubsub_multiple_channels(struct config config) {
|
||||||
test("Subscribe to multiple channels: ");
|
test("Subscribe to multiple channels: ");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user