Skip to content

Commit bb4556a

Browse files
committed
Partial fix build for memcached-protocl
1 parent 5e42fa9 commit bb4556a

File tree

2 files changed

+32
-25
lines changed

2 files changed

+32
-25
lines changed

php_memcached.c

+32-24
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;
@@ -3271,28 +3281,24 @@ zend_object *php_memc_object_new(zend_class_entry *ce)
32713281

32723282
#ifdef HAVE_MEMCACHED_PROTOCOL
32733283
static
3274-
void php_memc_server_free_storage(php_memc_server_t *intern)
3284+
void php_memc_server_free_storage(zend_object *object)
32753285
{
3286+
php_memc_server_t *intern = php_memc_server_fetch_object(object);
32763287
zend_object_std_dtor(&intern->zo);
3277-
efree (intern);
32783288
}
32793289

3280-
zend_object_value php_memc_server_new(zend_class_entry *ce)
3290+
zend_object *php_memc_server_new(zend_class_entry *ce)
32813291
{
3282-
zend_object_value retval;
32833292
php_memc_server_t *intern;
3284-
zval *tmp;
32853293

3286-
intern = ecalloc(1, sizeof(php_memc_server_t));
3294+
intern = ecalloc(1, sizeof(php_memc_server_t) + zend_object_properties_size(ce));
3295+
32873296
zend_object_std_init(&intern->zo, ce);
32883297
object_properties_init(&intern->zo, ce);
32893298

3290-
intern->handler = php_memc_proto_handler_new ();
3291-
3292-
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);
3293-
retval.handlers = &memcached_server_object_handlers;
3299+
intern->zo.handlers = &memcached_server_object_handlers;
32943300

3295-
return retval;
3301+
return &intern->zo;
32963302
}
32973303
#endif
32983304

@@ -3587,8 +3593,8 @@ void s_destroy_cb (zend_fcall_info *fci)
35873593
{
35883594
if (fci->size > 0) {
35893595
zval_ptr_dtor(&fci->function_name);
3590-
if (fci->object_ptr != NULL) {
3591-
zval_ptr_dtor(&fci->object_ptr);
3596+
if (fci->object) {
3597+
OBJ_RELEASE(fci->object);
35923598
}
35933599
}
35943600
}
@@ -3598,19 +3604,19 @@ PHP_METHOD(MemcachedServer, run)
35983604
{
35993605
int i;
36003606
zend_bool rc;
3601-
zend *address;
3607+
zend_string *address;
36023608

36033609
php_memc_server_t *intern;
3604-
intern = Z_MEMC_OBJ_P(getThis());
3610+
intern = Z_MEMC_SERVER_P(getThis());
36053611

36063612
if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &address) == FAILURE) {
36073613
return;
36083614
}
36093615

3610-
rc = php_memc_proto_handler_run (intern->handler, address);
3616+
rc = php_memc_proto_handler_run(intern->handler, address);
36113617

36123618
for (i = MEMC_SERVER_ON_MIN + 1; i < MEMC_SERVER_ON_MAX; i++) {
3613-
s_destroy_cb (&MEMC_G(server.callbacks) [i].fci);
3619+
s_destroy_cb(&MEMC_SERVER_G(callbacks) [i].fci);
36143620
}
36153621

36163622
RETURN_BOOL(rc);
@@ -3633,14 +3639,14 @@ PHP_METHOD(MemcachedServer, on)
36333639
}
36343640

36353641
if (fci.size > 0) {
3636-
s_destroy_cb (&MEMC_G(server.callbacks) [event].fci);
3642+
s_destroy_cb (&MEMC_SERVER_G(callbacks) [event].fci);
36373643

3638-
MEMC_G(server.callbacks) [event].fci = fci;
3639-
MEMC_G(server.callbacks) [event].fci_cache = fci_cache;
3644+
MEMC_SERVER_G(callbacks) [event].fci = fci;
3645+
MEMC_SERVER_G(callbacks) [event].fci_cache = fci_cache;
36403646

3641-
Z_ADDREF_P (fci.function_name);
3642-
if (fci.object_ptr) {
3643-
Z_ADDREF_P (fci.object_ptr);
3647+
Z_TRY_ADDREF(fci.function_name);
3648+
if (fci.object) {
3649+
GC_REFCOUNT(fci.object)++;
36443650
}
36453651
}
36463652
RETURN_BOOL(rc);
@@ -4370,7 +4376,9 @@ PHP_MINIT_FUNCTION(memcached)
43704376

43714377
#ifdef HAVE_MEMCACHED_PROTOCOL
43724378
memcpy(&memcached_server_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
4379+
memcached_server_object_handlers.offset = XtOffsetOf(php_memc_server_t, zo);
43734380
memcached_server_object_handlers.clone_obj = NULL;
4381+
memcached_server_object_handlers.free_obj = php_memc_server_free_storage;
43744382

43754383
INIT_CLASS_ENTRY(ce, "MemcachedServer", memcached_server_class_methods);
43764384
memcached_server_ce = zend_register_internal_class(&ce);

php_memcached_private.h

-1
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)