summaryrefslogtreecommitdiff
path: root/src/pubsub.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pubsub.c')
-rw-r--r--src/pubsub.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/pubsub.c b/src/pubsub.c
index 5e8cef0ae..ece32445d 100644
--- a/src/pubsub.c
+++ b/src/pubsub.c
@@ -118,7 +118,7 @@ int pubsubUnsubscribeChannel(redisClient *c, robj *channel, int notify) {
return retval;
}
-/* Subscribe a client to a pattern. Returns 1 if the operation succeeded, or 0 if the clinet was already subscribed to that pattern. */
+/* Subscribe a client to a pattern. Returns 1 if the operation succeeded, or 0 if the client was already subscribed to that pattern. */
int pubsubSubscribePattern(redisClient *c, robj *pattern) {
int retval = 0;
@@ -180,6 +180,14 @@ int pubsubUnsubscribeAllChannels(redisClient *c, int notify) {
count += pubsubUnsubscribeChannel(c,channel,notify);
}
+ /* We were subscribed to nothing? Still reply to the client. */
+ if (notify && count == 0) {
+ addReply(c,shared.mbulkhdr[3]);
+ addReply(c,shared.unsubscribebulk);
+ addReply(c,shared.nullbulk);
+ addReplyLongLong(c,dictSize(c->pubsub_channels)+
+ listLength(c->pubsub_patterns));
+ }
dictReleaseIterator(di);
return count;
}
@@ -197,6 +205,14 @@ int pubsubUnsubscribeAllPatterns(redisClient *c, int notify) {
count += pubsubUnsubscribePattern(c,pattern,notify);
}
+ if (notify && count == 0) {
+ /* We were subscribed to nothing? Still reply to the client. */
+ addReply(c,shared.mbulkhdr[3]);
+ addReply(c,shared.punsubscribebulk);
+ addReply(c,shared.nullbulk);
+ addReplyLongLong(c,dictSize(c->pubsub_channels)+
+ listLength(c->pubsub_patterns));
+ }
return count;
}