]> git.saurik.com Git - redis.git/commitdiff
maxmemory fixed, we now try to release memory just before we check for the memory...
authorantirez <antirez@gmail.com>
Mon, 11 Oct 2010 11:05:09 +0000 (13:05 +0200)
committerantirez <antirez@gmail.com>
Mon, 11 Oct 2010 11:05:09 +0000 (13:05 +0200)
src/redis.c

index 7b1b3f4fb7c7c539165c0e919b85322dadd8e0ee..27a855d97a0d0f6d4ff5c7f5328af250f6bc7c91 100644 (file)
@@ -889,9 +889,6 @@ void call(redisClient *c, struct redisCommand *cmd) {
 int processCommand(redisClient *c) {
     struct redisCommand *cmd;
 
-    /* Free some memory if needed (maxmemory setting) */
-    if (server.maxmemory) freeMemoryIfNeeded();
-
     /* Handle the multi bulk command type. This is an alternative protocol
      * supported by Redis in order to receive commands that are composed of
      * multiple binary-safe "bulk" arguments. The latency of processing is
@@ -1029,7 +1026,12 @@ int processCommand(redisClient *c) {
         return 1;
     }
 
-    /* Handle the maxmemory directive */
+    /* Handle the maxmemory directive.
+     *
+     * First we try to free some memory if possible (if there are volatile
+     * keys in the dataset). If there are not the only thing we can do
+     * is returning an error. */
+    if (server.maxmemory) freeMemoryIfNeeded();
     if (server.maxmemory && (cmd->flags & REDIS_CMD_DENYOOM) &&
         zmalloc_used_memory() > server.maxmemory)
     {