summaryrefslogtreecommitdiff
path: root/src/tracking.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tracking.c')
-rw-r--r--src/tracking.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/tracking.c b/src/tracking.c
index ef5840863..3333472a4 100644
--- a/src/tracking.c
+++ b/src/tracking.c
@@ -269,7 +269,17 @@ void trackingInvalidateKey(robj *keyobj) {
uint64_t id;
memcpy(&id,ri.key,sizeof(id));
client *c = lookupClientByID(id);
- if (c == NULL || !(c->flags & CLIENT_TRACKING)) continue;
+ /* Note that if the client is in BCAST mode, we don't want to
+ * send invalidation messages that were pending in the case
+ * previously the client was not in BCAST mode. This can happen if
+ * TRACKING is enabled normally, and then the client switches to
+ * BCAST mode. */
+ if (c == NULL ||
+ !(c->flags & CLIENT_TRACKING)||
+ c->flags & CLIENT_TRACKING_BCAST)
+ {
+ continue;
+ }
sendTrackingMessage(c,sdskey,sdslen(sdskey),0);
}
raxStop(&ri);