| 85 | } |
| 86 | |
| 87 | void rm_set_mem_capacity(int64_t cap) { |
| 88 | bool is_capped = (mem_capacity > 0); // current allocator applies memory cap |
| 89 | bool should_cap = (cap > 0); // should we use a memory capped allocator |
| 90 | |
| 91 | // The local enforced capacity should be set |
| 92 | // before resetting function pointers |
| 93 | // for instance if we're switching to capped allocator |
| 94 | // we want the memory cap to be set |
| 95 | mem_capacity = cap; |
| 96 | if(should_cap && !is_capped) { |
| 97 | // store the function pointer original values and change them |
| 98 | // to the capped version |
| 99 | RedisModule_Free_Orig = RedisModule_Free; |
| 100 | RedisModule_Alloc_Orig = RedisModule_Alloc; |
| 101 | RedisModule_Calloc_Orig = RedisModule_Calloc; |
| 102 | RedisModule_Strdup_Orig = RedisModule_Strdup; |
| 103 | RedisModule_Realloc_Orig = RedisModule_Realloc; |
| 104 | RedisModule_Free = rm_free_with_capacity; |
| 105 | RedisModule_Alloc = rm_alloc_with_capacity; |
| 106 | RedisModule_Calloc = rm_calloc_with_capacity; |
| 107 | RedisModule_Strdup = rm_strdup_with_capacity; |
| 108 | RedisModule_Realloc = rm_realloc_with_capacity; |
| 109 | } else if(!should_cap && is_capped) { |
| 110 | // restore all function pointers to their original values |
| 111 | RedisModule_Free = RedisModule_Free_Orig; |
| 112 | RedisModule_Alloc = RedisModule_Alloc_Orig; |
| 113 | RedisModule_Calloc = RedisModule_Calloc_Orig; |
| 114 | RedisModule_Strdup = RedisModule_Strdup_Orig; |
| 115 | RedisModule_Realloc = RedisModule_Realloc_Orig; |
| 116 | } |
| 117 | } |
| 118 | |
| 119 | #else |
| 120 | |