Commit 7493d2a0 authored by antirez's avatar antirez
Browse files

fixed diskstore race condition

parent dc75b1ed
...@@ -890,8 +890,16 @@ int waitForSwappedKey(redisClient *c, robj *key) { ...@@ -890,8 +890,16 @@ int waitForSwappedKey(redisClient *c, robj *key) {
listAddNodeTail(l,c); listAddNodeTail(l,c);
/* Are we already loading the key from disk? If not create a job */ /* Are we already loading the key from disk? If not create a job */
if (de == NULL) if (de == NULL) {
cacheScheduleIO(c->db,key,REDIS_IO_LOAD); int flags = cacheScheduleIOGetFlags(c->db,key);
/* It is possible that even if there are no clients waiting for
* a load operation, still we have a load operation in progress.
* For instance think to a client performing a GET and then
* closing the connection */
if ((flags & (REDIS_IO_LOAD|REDIS_IO_LOADINPROG)) == 0)
cacheScheduleIO(c->db,key,REDIS_IO_LOAD);
}
return 1; return 1;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment