From 201037f56215626ed2c96bdc589f486411b146d6 Mon Sep 17 00:00:00 2001
From: antirez <antirez@gmail.com>
Date: Mon, 29 Mar 2010 12:23:02 +0200
Subject: [PATCH] Fixed a refcount stuff leading to PUBSUB crashes

---
 redis.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/redis.c b/redis.c
index 453ab5319..6e450aaf4 100644
--- a/redis.c
+++ b/redis.c
@@ -9301,6 +9301,8 @@ static int pubsubUnsubscribe(redisClient *c, robj *class, int notify) {
     int retval = 0;
 
     /* Remove the class from the client -> classes hash table */
+    incrRefCount(class); /* class may be just a pointer to the same object
+                            we have in the hash tables. Protect it... */
     if (dictDelete(c->pubsub_classes,class) == DICT_OK) {
         retval = 1;
         /* Remove the client from the class -> clients list hash table */
@@ -9318,6 +9320,7 @@ static int pubsubUnsubscribe(redisClient *c, robj *class, int notify) {
         addReplyBulk(c,class);
         addReplyLong(c,dictSize(c->pubsub_classes));
     }
+    decrRefCount(class); /* it is finally safe to release it */
     return retval;
 }