Commit 3b9495d2 authored by antirez's avatar antirez
Browse files

LRU: use C99 variable len stack array in evictionPoolPopulate().

parent 2a124730
...@@ -115,16 +115,7 @@ struct evictionPoolEntry *evictionPoolAlloc(void) { ...@@ -115,16 +115,7 @@ struct evictionPoolEntry *evictionPoolAlloc(void) {
#define EVICTION_SAMPLES_ARRAY_SIZE 16 #define EVICTION_SAMPLES_ARRAY_SIZE 16
void evictionPoolPopulate(dict *sampledict, dict *keydict, struct evictionPoolEntry *pool) { void evictionPoolPopulate(dict *sampledict, dict *keydict, struct evictionPoolEntry *pool) {
int j, k, count; int j, k, count;
dictEntry *_samples[EVICTION_SAMPLES_ARRAY_SIZE]; dictEntry *samples[server.maxmemory_samples];
dictEntry **samples;
/* Try to use a static buffer: this function is a big hit...
* Note: it was actually measured that this helps. */
if (server.maxmemory_samples <= EVICTION_SAMPLES_ARRAY_SIZE) {
samples = _samples;
} else {
samples = zmalloc(sizeof(samples[0])*server.maxmemory_samples);
}
count = dictGetSomeKeys(sampledict,samples,server.maxmemory_samples); count = dictGetSomeKeys(sampledict,samples,server.maxmemory_samples);
for (j = 0; j < count; j++) { for (j = 0; j < count; j++) {
...@@ -175,7 +166,6 @@ void evictionPoolPopulate(dict *sampledict, dict *keydict, struct evictionPoolEn ...@@ -175,7 +166,6 @@ void evictionPoolPopulate(dict *sampledict, dict *keydict, struct evictionPoolEn
pool[k].key = sdsdup(key); pool[k].key = sdsdup(key);
pool[k].idle = idle; pool[k].idle = idle;
} }
if (samples != _samples) zfree(samples);
} }
int freeMemoryIfNeeded(void) { int freeMemoryIfNeeded(void) {
......
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