From b92106744de4e403d1b89b46de5ceb76a6fe5b75 Mon Sep 17 00:00:00 2001 From: Aaron Stone Date: Tue, 24 Jul 2018 06:16:28 -0500 Subject: [PATCH 1/2] Set TCP_NODELAY when setting binary protocol --- php_memcached.c | 5 +++++ php_memcached_session.c | 2 ++ 2 files changed, 7 insertions(+) diff --git a/php_memcached.c b/php_memcached.c index 930e1189..3c26c579 100644 --- a/php_memcached.c +++ b/php_memcached.c @@ -1288,6 +1288,11 @@ static PHP_METHOD(Memcached, __construct) if (rc != MEMCACHED_SUCCESS) { php_error_docref(NULL, E_WARNING, "Failed to turn on binary protocol: %s", memcached_strerror(intern->memc, rc)); } + /* Also enable TCP_NODELAY when binary protocol is enabled */ + rc = memcached_behavior_set(intern->memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, 1); + if (rc != MEMCACHED_SUCCESS) { + php_error_docref(NULL, E_WARNING, "Failed to set TCP_NODELAY: %s", memcached_strerror(intern->memc, rc)); + } } if (MEMC_G(default_behavior.connect_timeout)) { diff --git a/php_memcached_session.c b/php_memcached_session.c index 6acd9d3e..f37d58fa 100644 --- a/php_memcached_session.c +++ b/php_memcached_session.c @@ -193,6 +193,8 @@ zend_bool s_configure_from_ini_values(memcached_st *memc, zend_bool silent) if (MEMC_SESS_INI(binary_protocol_enabled)) { check_set_behavior(MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1); + /* Also enable TCP_NODELAY when binary protocol is enabled */ + check_set_behavior(MEMCACHED_BEHAVIOR_TCP_NODELAY, 1); } if (MEMC_SESS_INI(consistent_hash_enabled)) { From cf757dc3b3e726202c3f123326f0770c987dfb25 Mon Sep 17 00:00:00 2001 From: Aaron Stone Date: Fri, 9 Oct 2020 03:05:09 -0700 Subject: [PATCH 2/2] Add braces to the check_set_behavior macro --- php_memcached_session.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/php_memcached_session.c b/php_memcached_session.c index f37d58fa..8a0a7705 100644 --- a/php_memcached_session.c +++ b/php_memcached_session.c @@ -178,7 +178,9 @@ void s_unlock_session(memcached_st *memc) static zend_bool s_configure_from_ini_values(memcached_st *memc, zend_bool silent) { +/* This macro looks like a function but returns errors directly */ #define check_set_behavior(behavior, value) \ +{ \ int b = (behavior); \ uint64_t v = (value); \ if (v != memcached_behavior_get(memc, b)) { \ @@ -189,7 +191,8 @@ zend_bool s_configure_from_ini_values(memcached_st *memc, zend_bool silent) } \ return 0; \ } \ - } + } \ +} if (MEMC_SESS_INI(binary_protocol_enabled)) { check_set_behavior(MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1);