Skip to content

Commit 155a864

Browse files
committed
Merge branch 'php7' of github.com:php-memcached-dev/php-memcached into php7
2 parents 41b005f + bb4556a commit 155a864

File tree

2 files changed

+32
-25
lines changed

2 files changed

+32
-25
lines changed

php_memcached.c

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -217,10 +217,20 @@ static inline php_memc_object_t *php_memc_fetch_object(zend_object *obj) {
217217
#ifdef HAVE_MEMCACHED_PROTOCOL
218218

219219
typedef struct {
220-
zend_object zo;
221220
php_memc_proto_handler_t *handler;
221+
zend_object zo;
222222
} php_memc_server_t;
223223

224+
static inline php_memc_server_t *php_memc_server_fetch_object(zend_object *obj) {
225+
return (php_memc_server_t *)((char *)obj - XtOffsetOf(php_memc_server_t, zo));
226+
}
227+
#define Z_MEMC_SERVER_P(zv) php_memc_server_fetch_object(Z_OBJ_P(zv))
228+
229+
#ifdef ZTS
230+
#define MEMC_SERVER_G(v) TSRMG(php_memcached_globals_id, zend_php_memcached_globals *, server.v)
231+
#else
232+
#define MEMC_SERVER_G(v) (php_memcached_globals.server.v)
233+
#endif
224234
#endif
225235

226236
static zend_class_entry *memcached_ce = NULL;
@@ -3276,28 +3286,24 @@ zend_object *php_memc_object_new(zend_class_entry *ce)
32763286

32773287
#ifdef HAVE_MEMCACHED_PROTOCOL
32783288
static
3279-
void php_memc_server_free_storage(php_memc_server_t *intern)
3289+
void php_memc_server_free_storage(zend_object *object)
32803290
{
3291+
php_memc_server_t *intern = php_memc_server_fetch_object(object);
32813292
zend_object_std_dtor(&intern->zo);
3282-
efree (intern);
32833293
}
32843294

3285-
zend_object_value php_memc_server_new(zend_class_entry *ce)
3295+
zend_object *php_memc_server_new(zend_class_entry *ce)
32863296
{
3287-
zend_object_value retval;
32883297
php_memc_server_t *intern;
3289-
zval *tmp;
32903298

3291-
intern = ecalloc(1, sizeof(php_memc_server_t));
3299+
intern = ecalloc(1, sizeof(php_memc_server_t) + zend_object_properties_size(ce));
3300+
32923301
zend_object_std_init(&intern->zo, ce);
32933302
object_properties_init(&intern->zo, ce);
32943303

3295-
intern->handler = php_memc_proto_handler_new ();
3296-
3297-
retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t)php_memc_server_free_storage, NULL);
3298-
retval.handlers = &memcached_server_object_handlers;
3304+
intern->zo.handlers = &memcached_server_object_handlers;
32993305

3300-
return retval;
3306+
return &intern->zo;
33013307
}
33023308
#endif
33033309

@@ -3592,8 +3598,8 @@ void s_destroy_cb (zend_fcall_info *fci)
35923598
{
35933599
if (fci->size > 0) {
35943600
zval_ptr_dtor(&fci->function_name);
3595-
if (fci->object_ptr != NULL) {
3596-
zval_ptr_dtor(&fci->object_ptr);
3601+
if (fci->object) {
3602+
OBJ_RELEASE(fci->object);
35973603
}
35983604
}
35993605
}
@@ -3603,19 +3609,19 @@ PHP_METHOD(MemcachedServer, run)
36033609
{
36043610
int i;
36053611
zend_bool rc;
3606-
zend *address;
3612+
zend_string *address;
36073613

36083614
php_memc_server_t *intern;
3609-
intern = Z_MEMC_OBJ_P(getThis());
3615+
intern = Z_MEMC_SERVER_P(getThis());
36103616

36113617
if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &address) == FAILURE) {
36123618
return;
36133619
}
36143620

3615-
rc = php_memc_proto_handler_run (intern->handler, address);
3621+
rc = php_memc_proto_handler_run(intern->handler, address);
36163622

36173623
for (i = MEMC_SERVER_ON_MIN + 1; i < MEMC_SERVER_ON_MAX; i++) {
3618-
s_destroy_cb (&MEMC_G(server.callbacks) [i].fci);
3624+
s_destroy_cb(&MEMC_SERVER_G(callbacks) [i].fci);
36193625
}
36203626

36213627
RETURN_BOOL(rc);
@@ -3638,14 +3644,14 @@ PHP_METHOD(MemcachedServer, on)
36383644
}
36393645

36403646
if (fci.size > 0) {
3641-
s_destroy_cb (&MEMC_G(server.callbacks) [event].fci);
3647+
s_destroy_cb (&MEMC_SERVER_G(callbacks) [event].fci);
36423648

3643-
MEMC_G(server.callbacks) [event].fci = fci;
3644-
MEMC_G(server.callbacks) [event].fci_cache = fci_cache;
3649+
MEMC_SERVER_G(callbacks) [event].fci = fci;
3650+
MEMC_SERVER_G(callbacks) [event].fci_cache = fci_cache;
36453651

3646-
Z_ADDREF_P (fci.function_name);
3647-
if (fci.object_ptr) {
3648-
Z_ADDREF_P (fci.object_ptr);
3652+
Z_TRY_ADDREF(fci.function_name);
3653+
if (fci.object) {
3654+
GC_REFCOUNT(fci.object)++;
36493655
}
36503656
}
36513657
RETURN_BOOL(rc);
@@ -4375,7 +4381,9 @@ PHP_MINIT_FUNCTION(memcached)
43754381

43764382
#ifdef HAVE_MEMCACHED_PROTOCOL
43774383
memcpy(&memcached_server_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
4384+
memcached_server_object_handlers.offset = XtOffsetOf(php_memc_server_t, zo);
43784385
memcached_server_object_handlers.clone_obj = NULL;
4386+
memcached_server_object_handlers.free_obj = php_memc_server_free_storage;
43794387

43804388
INIT_CLASS_ENTRY(ce, "MemcachedServer", memcached_server_class_methods);
43814389
memcached_server_ce = zend_register_internal_class(&ce);

php_memcached_private.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,6 @@ ZEND_BEGIN_MODULE_GLOBALS(php_memcached)
195195
/* For deprecated values */
196196
zend_long no_effect;
197197

198-
199198
#ifdef HAVE_MEMCACHED_PROTOCOL
200199
struct {
201200
php_memc_server_cb_t callbacks [MEMC_SERVER_ON_MAX];

0 commit comments

Comments
 (0)