• A
    This fixes issue #327, is a very complex fix (unfortunately), details: · f6b32c14
    antirez 提交于
    1) sendReplyToClient() now no longer stops transferring data to a single
    client in the case we are out of memory (maxmemory-wise).
    
    2) in processCommand() the idea of we being out of memory is no longer
    the naive zmalloc_used_memory() > server.maxmemory. To say if we can
    accept or not write queries is up to the return value of
    freeMemoryIfNeeded(), that has full control about that.
    
    3) freeMemoryIfNeeded() now does its math without considering output
    buffers size. But at the same time it can't let the output buffers to
    put us too much outside the max memory limit, so at the same time it
    makes sure there is enough effort into delivering the output buffers to
    the slaves, calling the write handler directly.
    
    This three changes are the result of many tests, I found (partially
    empirically) that is the best way to address the problem, but maybe
    we'll find better solutions in the future.
    f6b32c14
networking.c 44.6 KB