summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/db.c13
-rw-r--r--src/redis.c13
-rw-r--r--src/redis.h1
3 files changed, 15 insertions, 12 deletions
diff --git a/src/db.c b/src/db.c
index 560ac7349..65a2a9c8e 100644
--- a/src/db.c
+++ b/src/db.c
@@ -219,9 +219,7 @@ void randomkeyCommand(redisClient *c) {
static void addToReply(void *context, robj *keyobj) {
redisClient *c = (redisClient *)context;
- if (expireIfNeeded(c->db,keyobj) == 0) {
- addReplyBulk(c,keyobj);
- }
+ addReplyBulk(c,keyobj);
}
static void addToList(void *context, robj *keyobj) {
@@ -267,7 +265,8 @@ void keysCommand(redisClient *c) {
void keystolistCommand(redisClient *c) {
sds pattern = c->argv[1]->ptr;
- robj *lobj = lookupKeyWrite(c->db,c->argv[2]);
+ robj *key = c->argv[2];
+ robj *lobj = lookupKeyWrite(c->db,key);
unsigned long numkeys;
if (lobj != NULL) {
@@ -275,14 +274,14 @@ void keystolistCommand(redisClient *c) {
addReply(c,shared.wrongtypeerr);
return;
}
- dbDelete(c->db,c->argv[2]);
+ dbDelete(c->db,key);
}
lobj = createZiplistObject();
- dbAdd(c->db,c->argv[2],lobj);
+ dbAdd(c->db,key,lobj);
numkeys = scanKeys(c->db,pattern,addToList,lobj);
addReplyLongLong(c,numkeys);
- touchWatchedKey(c->db,c->argv[2]);
+ touchWatchedKey(c->db,key);
server.dirty++;
}
diff --git a/src/redis.c b/src/redis.c
index 3b3711f51..a4c87961e 100644
--- a/src/redis.c
+++ b/src/redis.c
@@ -1328,7 +1328,7 @@ void freeMemoryIfNeeded(void) {
if (tryFreeOneObjectFromFreelist() == REDIS_OK) continue;
for (j = 0; j < server.dbnum; j++) {
int minttl = -1;
- robj *minkey = NULL;
+ sds minkey = NULL;
struct dictEntry *de;
if (dictSize(server.db[j].expires)) {
@@ -1346,10 +1346,11 @@ void freeMemoryIfNeeded(void) {
}
}
- dictDelete(server.db[j].expires,minkey);
- dictDelete(server.db[j].dict,minkey);
- server.db[j].expired_count++;
- server.db[j].prematurely_expired_count++;
+ if (dictDelete(server.db[j].expires,minkey) == DICT_OK &&
+ dictDelete(server.db[j].dict,minkey) == DICT_OK) {
+ server.db[j].expired_count++;
+ server.db[j].prematurely_expired_count++;
+ }
}
}
if (!freed) return; /* nothing to free... */
@@ -1547,6 +1548,8 @@ void setupSigTermAction(void) {
#else /* HAVE_BACKTRACE */
void setupSigSegvAction(void) {
}
+void setupSigTermAction(void) {
+}
#endif /* HAVE_BACKTRACE */
/* The End */
diff --git a/src/redis.h b/src/redis.h
index 0a64bf5f9..9b58d12a2 100644
--- a/src/redis.h
+++ b/src/redis.h
@@ -685,6 +685,7 @@ void zslInsert(zskiplist *zsl, double score, robj *obj);
void freeMemoryIfNeeded(void);
int processCommand(redisClient *c);
void setupSigSegvAction(void);
+void setupSigTermAction(void);
struct redisCommand *lookupCommand(char *name);
void call(redisClient *c, struct redisCommand *cmd);
int prepareForShutdown();