Skip to content

OPT_NOREPLY: touch() stuck forever #542

Open
@killerbees19

Description

@killerbees19

Example code:

<?php

$mc = new Memcached();
$mc->addServer('localhost', 11211);
$mc->setOptions([Memcached::OPT_NOREPLY => true]);
$mc->touch('test', 120);

Now it's stuck at 100% CPU usage until the process gets killed. Without OPT_NOREPLY everything is fine. Both protocols (text/binary) are affected by this bug.

strace output:

connect(3, {sa_family=AF_INET, sin_port=htons(11211), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
poll([{fd=3, events=POLLOUT}], 1, 4000) = 1 ([{fd=3, revents=POLLOUT}])
getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
sendto(3, "touch test 120\r\n", 16, MSG_NOSIGNAL, NULL, 0) = 16
recvfrom(3, "NOT_FOUND\r\n", 8196, MSG_NOSIGNAL, NULL, NULL) = 11
write(1, "bool(true)\n", 11bool(true)
)            = 11
write(1, "bool(false)\n", 12bool(false)
)           = 12
sendto(3, "quit\r\n", 6, MSG_NOSIGNAL, NULL, 0) = 6
recvfrom(3, "", 8196, MSG_NOSIGNAL, NULL, NULL) = 0
shutdown(3, SHUT_RDWR)                  = 0
close(3)                                = 0
connect(3, {sa_family=AF_INET, sin_port=htons(11211), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
poll([{fd=3, events=POLLOUT}], 1, 4000) = 1 ([{fd=3, revents=POLLOUT}])
getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
sendto(3, "\200\34\0\4\4\0\0\0\0\0\0\10\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0xtest", 32, MSG_NOSIGNAL, NULL, 0) = 32
recvfrom(3, "\201\34\0\0\0\0\0\1\0\0\0\t\0\1\0\0\0\0\0\0\0\0\0\0Not foun"..., 8196, MSG_NOSIGNAL, NULL, NULL) = 33
write(1, "bool(true)\n", 11bool(true)
)            = 11
write(1, "bool(false)\n", 12bool(false)
)           = 12
sendto(3, "\200\7\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0", 24, MSG_NOSIGNAL, NULL, 0) = 24
recvfrom(3, "\201\7\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0", 8196, MSG_NOSIGNAL, NULL, NULL) = 24
recvfrom(3, "", 8196, MSG_NOSIGNAL, NULL, NULL) = 0
shutdown(3, SHUT_RDWR)                  = 0
close(3)                                = 0

Tested at Debian 11 (amd64) with PHP 5.6 to 8.2 (deb.sury.org)

libmemcached11       1.0.18-4.2                                  
php5.6-memcached     1:2.2.0-1+0~20230619.3+debian11~1.gbpaf2604 
php7.0-memcached     3.2.0++-1+0~20230622.54+debian11~1.gbp8f3995
php7.1-memcached     3.2.0++-1+0~20230622.54+debian11~1.gbp8f3995
php7.2-memcached     3.2.0++-1+0~20230622.54+debian11~1.gbp8f3995
php7.3-memcached     3.2.0++-1+0~20230622.54+debian11~1.gbp8f3995
php7.4-memcached     3.2.0++-1+0~20230622.54+debian11~1.gbp8f3995
php8.0-memcached     3.2.0++-1+0~20230622.54+debian11~1.gbp8f3995
php8.1-memcached     3.2.0++-1+0~20230622.54+debian11~1.gbp8f3995
php8.2-memcached     3.2.0++-1+0~20230622.54+debian11~1.gbp8f3995

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions