Return 1 if used memory is more than maxmemory after allocating more memory, * return 0 if not. Redis may reject user's requests or evict some keys if used * memory exceeds maxmemory, especially, when we allocate huge memory at once. */
| 416 | * return 0 if not. Redis may reject user's requests or evict some keys if used |
| 417 | * memory exceeds maxmemory, especially, when we allocate huge memory at once. */ |
| 418 | int overMaxmemoryAfterAlloc(size_t moremem) { |
| 419 | if (!server.maxmemory) return 0; /* No limit. */ |
| 420 | |
| 421 | /* Check quickly. */ |
| 422 | size_t mem_used = zmalloc_used_memory(); |
| 423 | if (mem_used + moremem <= server.maxmemory) return 0; |
| 424 | |
| 425 | size_t overhead = freeMemoryGetNotCountedMemory(); |
| 426 | mem_used = (mem_used > overhead) ? mem_used - overhead : 0; |
| 427 | return mem_used + moremem > server.maxmemory; |
| 428 | } |
| 429 | |
| 430 | /* The evictionTimeProc is started when "maxmemory" has been breached and |
| 431 | * could not immediately be resolved. This will spin the event loop with short |
no test coverage detected