mirror of
https://github.com/fluencelabs/redis
synced 2025-03-20 17:40:50 +00:00
Merge pull request #3244 from dvirsky/optimize_autoMemoryFreed
Optimized autoMemoryFreed loop
This commit is contained in:
commit
2fe9b79897
16
src/module.c
16
src/module.c
@ -611,14 +611,22 @@ void autoMemoryFreed(RedisModuleCtx *ctx, int type, void *ptr) {
|
|||||||
if (!(ctx->flags & REDISMODULE_CTX_AUTO_MEMORY)) return;
|
if (!(ctx->flags & REDISMODULE_CTX_AUTO_MEMORY)) return;
|
||||||
|
|
||||||
int j;
|
int j;
|
||||||
for (j = 0; j < ctx->amqueue_used; j++) {
|
for (j = ctx->amqueue_used - 1; j >= 0; j--) {
|
||||||
if (ctx->amqueue[j].type == type &&
|
if (ctx->amqueue[j].type == type &&
|
||||||
ctx->amqueue[j].ptr == ptr)
|
ctx->amqueue[j].ptr == ptr)
|
||||||
{
|
{
|
||||||
ctx->amqueue[j].type = REDISMODULE_AM_FREED;
|
ctx->amqueue[j].type = REDISMODULE_AM_FREED;
|
||||||
/* Optimization: if this is the last element, we can
|
|
||||||
* reuse it. */
|
/* Switch the freed element and the top element, to avoid growing
|
||||||
if (j == ctx->amqueue_used-1) ctx->amqueue_used--;
|
* the queue unnecessarily if we allocate/free in a loop */
|
||||||
|
if (j != ctx->amqueue_used-1) {
|
||||||
|
ctx->amqueue[j] = ctx->amqueue[ctx->amqueue_used-1];
|
||||||
|
}
|
||||||
|
/* Reduce the size of the queue because we either moved the top
|
||||||
|
* element elsewhere or freed it */
|
||||||
|
ctx->amqueue_used--;
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user