When using the shutdown command with redis-cli the server saves the database and, if successful, silently closes the connection. The redis-cli tool did not correcty handle this EOF case in its readLine loop and was therefore infinitely looping - and eating 100% of the CPU - while waiting for some data which would never come.
while(1) {
char c;
+ ssize_t ret;
- if (read(fd,&c,1) == -1) {
+ ret = read(fd,&c,1);
+ if (ret == -1) {
sdsfree(line);
return NULL;
- } else if (c == '\n') {
+ } else if ((ret == 0) || (c == '\n')) {
break;
} else {
line = sdscatlen(line,&c,1);