X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/16d778780eb865deefb2bfa024aef50926917eac..f63f0928c3e08f60f6b8557dc7c5d635834f990b:/src/object.c diff --git a/src/object.c b/src/object.c index 4374a07c..f4c34dcf 100644 --- a/src/object.c +++ b/src/object.c @@ -208,16 +208,16 @@ robj *tryObjectEncoding(robj *o) { /* Ok, this object can be encoded... * * Can I use a shared object? Only if the object is inside a given - * 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). + * range and if the back end in use is in-memory. For disk store every + * object in memory used as value should be independent. * * 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 + * because every 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)) { + if (server.ds_enabled == 0 && + server.maxmemory == 0 && value >= 0 && value < REDIS_SHARED_INTEGERS && + pthread_equal(pthread_self(),server.mainthread)) + { decrRefCount(o); incrRefCount(shared.integers[value]); return shared.integers[value];