optimized amFree even further

This commit is contained in:
Dvir Volk 2016-05-19 13:51:55 +03:00
parent 46b07cbb5c
commit 137fd86a61

View File

@ -585,12 +585,17 @@ void autoMemoryFreed(RedisModuleCtx *ctx, int type, void *ptr) {
ctx->amqueue[j].ptr == ptr)
{
ctx->amqueue[j].type = REDISMODULE_AM_FREED;
/* Optimization: if this is the last element, we can
* reuse it. */
if (j == ctx->amqueue_used-1) ctx->amqueue_used--;
/* Switch the freed element and the top element, to avoid growing
* 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;
}
}
}