use fci and fcc for read2 cb

This commit is contained in:
Shuhei Tanuma 2012-07-12 00:45:20 +09:00
parent 15fd7624d5
commit 98ff7e121b
2 changed files with 7 additions and 12 deletions

View File

@ -60,7 +60,6 @@
}\ }\
uv->in_free = 0;\ uv->in_free = 0;\
uv->address = NULL; \ uv->address = NULL; \
uv->read2_cb = NULL; \
uv->getaddr_cb = NULL; \ uv->getaddr_cb = NULL; \
} }
@ -503,11 +502,6 @@ void static destruct_uv(zend_rsrc_list_entry *rsrc TSRMLS_DC)
zval_ptr_dtor(&obj->address); zval_ptr_dtor(&obj->address);
obj->address = NULL; obj->address = NULL;
} }
if (obj->read2_cb) {
PHP_UV_DEBUG_PRINT("zval_ptr_dtor: read2_cb\n");
zval_ptr_dtor(&obj->read2_cb);
obj->read2_cb = NULL;
}
if (obj->getaddr_cb) { if (obj->getaddr_cb) {
PHP_UV_DEBUG_PRINT("zval_ptr_dtor: getaddr_cb\n"); PHP_UV_DEBUG_PRINT("zval_ptr_dtor: getaddr_cb\n");
zval_ptr_dtor(&obj->getaddr_cb); zval_ptr_dtor(&obj->getaddr_cb);
@ -854,7 +848,7 @@ static void php_uv_read2_cb(uv_pipe_t* handle, ssize_t nread, uv_buf_t buf, uv_h
params[2] = &buffer; params[2] = &buffer;
params[3] = &pend; params[3] = &pend;
php_uv_do_callback(&retval_ptr, uv->read2_cb, params, 4 TSRMLS_CC); php_uv_do_callback2(&retval_ptr, uv, params, 4, PHP_UV_READ2_CB TSRMLS_CC);
zval_ptr_dtor(&buffer); zval_ptr_dtor(&buffer);
zval_ptr_dtor(&rsc); zval_ptr_dtor(&rsc);
@ -2751,22 +2745,23 @@ PHP_FUNCTION(uv_read_start)
*/ */
PHP_FUNCTION(uv_read2_start) PHP_FUNCTION(uv_read2_start)
{ {
zval *client, *callback; zval *client;
php_uv_t *uv; php_uv_t *uv;
int r; int r;
zend_fcall_info fci = empty_fcall_info;
zend_fcall_info_cache fcc = empty_fcall_info_cache;
php_uv_cb_t *cb;
PHP_UV_DEBUG_PRINT("uv_read2_start\n"); PHP_UV_DEBUG_PRINT("uv_read2_start\n");
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
"rz",&client, &callback) == FAILURE) { "rf",&client, &fci, &fcc) == FAILURE) {
return; return;
} }
ZEND_FETCH_RESOURCE(uv, php_uv_t *, &client, -1, PHP_UV_RESOURCE_NAME, uv_resource_handle); ZEND_FETCH_RESOURCE(uv, php_uv_t *, &client, -1, PHP_UV_RESOURCE_NAME, uv_resource_handle);
Z_ADDREF_P(callback);
zend_list_addref(uv->resource_id); zend_list_addref(uv->resource_id);
uv->read2_cb = callback;
if(uv->type == IS_UV_TCP) { if(uv->type == IS_UV_TCP) {
uv->uv.tcp.data = uv; uv->uv.tcp.data = uv;
} else if(uv->type == IS_UV_PIPE) { } else if(uv->type == IS_UV_PIPE) {
@ -2775,6 +2770,7 @@ PHP_FUNCTION(uv_read2_start)
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "this type does not support yet"); php_error_docref(NULL TSRMLS_CC, E_NOTICE, "this type does not support yet");
} }
php_uv_cb_init(&cb, uv, &fci, &fcc, PHP_UV_READ2_CB);
r = uv_read2_start((uv_stream_t*)php_uv_get_current_stream(uv), php_uv_read_alloc, php_uv_read2_cb); r = uv_read2_start((uv_stream_t*)php_uv_get_current_stream(uv), php_uv_read_alloc, php_uv_read2_cb);
if (r) { if (r) {
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "read2 failed"); php_error_docref(NULL TSRMLS_CC, E_NOTICE, "read2 failed");

View File

@ -122,7 +122,6 @@ typedef struct {
} uv; } uv;
char *buffer; char *buffer;
zval *address; zval *address;
zval *read2_cb;
zval *getaddr_cb; zval *getaddr_cb;
php_uv_cb_t *callback[PHP_UV_CB_MAX]; php_uv_cb_t *callback[PHP_UV_CB_MAX];
} php_uv_t; } php_uv_t;