]> git.saurik.com Git - redis.git/commitdiff
prevent small integer sharing when maxmemory is active. So every object will use...
authorantirez <antirez@gmail.com>
Fri, 15 Oct 2010 16:04:05 +0000 (18:04 +0200)
committerantirez <antirez@gmail.com>
Fri, 15 Oct 2010 16:04:05 +0000 (18:04 +0200)
src/object.c

index bba448241b0000ef68f15288b233469e6ffe30f7..b1eae96329ebe59a4cdc7366d8ca0d393ed27761 100644 (file)
@@ -245,8 +245,12 @@ robj *tryObjectEncoding(robj *o) {
      * range and if this is the main thread, since when VM is enabled we
      * have the constraint that I/O thread should only handle non-shared
      * objects, in order to avoid race conditions (we don't have per-object
-     * locking). */
-    if (value >= 0 && value < REDIS_SHARED_INTEGERS &&
+     * locking).
+     *
+     * Note that we also avoid using shared integers when maxmemory is used
+     * because very object needs to have a private LRU field for the LRU
+     * algorithm to work well. */
+    if (server.maxmemory == 0 && value >= 0 && value < REDIS_SHARED_INTEGERS &&
         pthread_equal(pthread_self(),server.mainthread)) {
         decrRefCount(o);
         incrRefCount(shared.integers[value]);