diff --git a/src/notify.c b/src/notify.c index f8e018295..bb598c4f2 100644 --- a/src/notify.c +++ b/src/notify.c @@ -92,22 +92,22 @@ sds keyspaceEventsFlagsToString(int flags) { * 'dbid' is the database ID where the key lives. */ void notifyKeyspaceEvent(int type, char *event, robj *key, int dbid) { sds chan; - robj *chanobj; + robj *chanobj, *eventobj; int len = -1; char buf[24]; /* If notifications for this class of events are off, return ASAP. */ if (!(server.notify_keyspace_events & type)) return; + eventobj = createStringObject(event,strlen(event)); + /* __keyspace@__: notifications. */ if (server.notify_keyspace_events & REDIS_NOTIFY_KEYSPACE) { - robj *eventobj; - chan = sdsnewlen("__keyspace@",11); len = ll2string(buf,sizeof(buf),dbid); chan = sdscatlen(chan, buf, len); chan = sdscatlen(chan, "__:", 3); - eventobj = createStringObject(event,strlen(event)); + chan = sdscatsds(chan, key->ptr); chanobj = createObject(REDIS_STRING, chan); pubsubPublishMessage(chanobj, eventobj); decrRefCount(chanobj); @@ -119,8 +119,10 @@ void notifyKeyspaceEvent(int type, char *event, robj *key, int dbid) { if (len == -1) len = ll2string(buf,sizeof(buf),dbid); chan = sdscatlen(chan, buf, len); chan = sdscatlen(chan, "__:", 3); + chan = sdscatsds(chan, eventobj->ptr); chanobj = createObject(REDIS_STRING, chan); pubsubPublishMessage(chanobj, key); decrRefCount(chanobj); } + decrRefCount(eventobj); } diff --git a/tests/assets/default.conf b/tests/assets/default.conf index 6ecfaebe7..ad98b79a4 100644 --- a/tests/assets/default.conf +++ b/tests/assets/default.conf @@ -13,7 +13,7 @@ # units are case insensitive so 1GB 1Gb 1gB are all the same. # Enable keyspace events notification for testing so that we cover more code. -notify-keyspace-events A +notify-keyspace-events KEA # By default Redis does not run as a daemon. Use 'yes' if you need it. # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.