projects
/
redis.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
1fce320
)
fixed bugs on diskstore cache
author
antirez
<antirez@gmail.com>
Thu, 30 Dec 2010 16:21:54 +0000
(17:21 +0100)
committer
antirez
<antirez@gmail.com>
Thu, 30 Dec 2010 16:21:54 +0000
(17:21 +0100)
src/dscache.c
patch
|
blob
|
blame
|
history
diff --git
a/src/dscache.c
b/src/dscache.c
index b37a8cd3bb0e67e1eedc911f2a8c346ffe8faed0..fc358c5290e57899ae59dfc8941c600de6fc540e 100644
(file)
--- a/
src/dscache.c
+++ b/
src/dscache.c
@@
-471,7
+471,7
@@
void cacheScheduleForFlush(redisDb *db, robj *key) {
dk->key = key;
incrRefCount(key);
dk->ctime = time(NULL);
dk->key = key;
incrRefCount(key);
dk->ctime = time(NULL);
- listAddNodeTail(server.cache_flush_queue,
key
);
+ listAddNodeTail(server.cache_flush_queue,
dk
);
}
void cacheCron(void) {
}
void cacheCron(void) {
@@
-488,8
+488,10
@@
void cacheCron(void) {
redisLog(REDIS_DEBUG,"Creating IO Job to save key %s",dk->key->ptr);
redisLog(REDIS_DEBUG,"Creating IO Job to save key %s",dk->key->ptr);
- /* Lookup the key. We need to check if it's still here and
- * possibly access to the value. */
+ /* Lookup the key, in order to put the current value in the IO
+ * Job and mark ti as DS_SAVING.
+ * Otherwise if the key does not exists we schedule a disk store
+ * delete operation, setting the value to NULL. */
de = dictFind(dk->db->dict,dk->key->ptr);
if (de) {
val = dictGetEntryVal(de);
de = dictFind(dk->db->dict,dk->key->ptr);
if (de) {
val = dictGetEntryVal(de);
@@
-502,6
+504,8
@@
void cacheCron(void) {
}
dsCreateIOJob(REDIS_IOJOB_SAVE,dk->db,dk->key,val);
listDelNode(server.cache_flush_queue,ln);
}
dsCreateIOJob(REDIS_IOJOB_SAVE,dk->db,dk->key,val);
listDelNode(server.cache_flush_queue,ln);
+ decrRefCount(dk->key);
+ zfree(dk);
} else {
break; /* too early */
}
} else {
break; /* too early */
}