• A
    Fix MIGRATE closing of cached socket on error. · f917e0da
    antirez 提交于
    After investigating issue #3796, it was discovered that MIGRATE
    could call migrateCloseSocket() after the original MIGRATE c->argv
    was already rewritten as a DEL operation. As a result the host/port
    passed to migrateCloseSocket() could be anything, often a NULL pointer
    that gets deferenced crashing the server.
    
    Now the socket is closed at an earlier time when there is a socket
    error in a later stage where no retry will be performed, before we
    rewrite the argument vector. Moreover a check was added so that later,
    in the socket_err label, there is no further attempt at closing the
    socket if the argument was rewritten.
    
    This fix should resolve the bug reported in #3796.
    f917e0da
cluster.c 206.8 KB