Skip to content

Commit f589922

Browse files
committed
Merge branch 'fix/php-memcached-531' into v1.x
2 parents 60f8b54 + 7163bb2 commit f589922

File tree

4 files changed

+34
-12
lines changed

4 files changed

+34
-12
lines changed

src/libmemcached/purge.cc

-3
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,6 @@ bool memcached_purge(memcached_instance_st *ptr) {
108108
WATCHPOINT_ERROR(rc);
109109
is_successful = false;
110110
}
111-
if (rc == MEMCACHED_TIMEOUT) {
112-
break;
113-
}
114111

115112
if (ptr->root->callbacks) {
116113
memcached_callback_st cb = *ptr->root->callbacks;

src/libmemcached/response.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,7 @@ static memcached_return_t _read_one_response(memcached_instance_st *instance, ch
761761
rc = textual_read_one_response(instance, buffer, buffer_length, result);
762762
}
763763

764-
if (memcached_fatal(rc) && rc != MEMCACHED_TIMEOUT) {
764+
if (memcached_fatal(rc)) {
765765
memcached_io_reset(instance);
766766
}
767767

test/tests/memcached/noblock.cpp

+4-8
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ TEST_CASE("memcached_noblock") {
1010
REQUIRE_SUCCESS(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, 1));
1111
REQUIRE_SUCCESS(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_POLL_TIMEOUT, timeout));
1212

13-
auto num = timeout ? 10'000 : 1'000'000;
13+
auto num = 10000;
1414
auto hit = 0u;
1515
auto rnd = random_ascii_string(512);
1616
for (auto i = 0; i < num; ++i) {
@@ -23,20 +23,16 @@ TEST_CASE("memcached_noblock") {
2323
break;
2424
case MEMCACHED_TIMEOUT:
2525
case MEMCACHED_WRITE_FAILURE:
26-
if(!timeout) {
27-
--i;
28-
}
2926
++hit;
30-
REQUIRE(true);
3127
break;
3228
default:
3329
REQUIRE(false);
3430
}
3531
}
36-
INFO("failures triggered: " << hit);
32+
INFO("timeout=" << timeout << " failures triggered: " << hit);
3733
if (timeout) {
38-
CHECK_FALSE(hit);
34+
REQUIRE_FALSE(hit);
3935
} else {
40-
CHECK(hit > 0);
36+
REQUIRE(hit > 0);
4137
}
4238
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#include "test/lib/common.hpp"
2+
#include "test/lib/MemcachedCluster.hpp"
3+
4+
TEST_CASE("memcached_regression_gh-php-memcached_0531") {
5+
auto test = MemcachedCluster{Cluster{Server{MEMCACHED_BINARY, {"-p", random_socket_or_port_string("-p")}}, 1}};
6+
auto memc = &test.memc;
7+
auto nonblock = GENERATE(0, 1);
8+
9+
INFO("nonblock=" << nonblock);
10+
11+
REQUIRE_SUCCESS(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, nonblock));
12+
13+
REQUIRE_SUCCESS(memcached_set(memc, S("first"), S("first"), 0, 0));
14+
REQUIRE_SUCCESS(memcached_set(memc, S("second"), S("second"), 0, 0));
15+
16+
REQUIRE_SUCCESS(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_POLL_TIMEOUT, 0));
17+
18+
memcached_return_t rc;
19+
size_t len;
20+
Malloced value1(memcached_get(memc, S("first"), &len, nullptr, &rc));
21+
REQUIRE_RC(MEMCACHED_TIMEOUT, rc);
22+
REQUIRE_FALSE(*value1);
23+
24+
REQUIRE_SUCCESS(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_POLL_TIMEOUT, 100));
25+
26+
Malloced value2(memcached_get(memc, S("second"), &len, nullptr, &rc));
27+
REQUIRE_SUCCESS(rc);
28+
REQUIRE(string(*value2) == string("second"));
29+
}

0 commit comments

Comments
 (0)