com php-src: Fixed stream notifier: ext/standard/streamsfuncs.c main/streams/php_stream_context.h

From: Date: Mon, 17 Mar 2014 20:08:50 +0000
Subject: com php-src: Fixed stream notifier: ext/standard/streamsfuncs.c main/streams/php_stream_context.h
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-77611@lists.php.net to get a copy of this message
Commit: 53a63dbd7d7c331e93973332594cdda554da7608 Author: Dmitry Stogov <dmitry@zend.com> Tue, 18 Mar 2014 00:08:50 +0400 Parents: aa5f55306b4bd630e9304e9a8d1ea10cf4121f78 Branches: phpng Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=53a63dbd7d7c331e93973332594cdda554da7608 Log: Fixed stream notifier Changed paths: M ext/standard/streamsfuncs.c M main/streams/php_stream_context..h Diff: diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index 197f55b..c80aa6e 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -873,7 +873,7 @@ PHP_FUNCTION(stream_select) static void user_space_stream_notifier(php_stream_context *context, int notifycode, int severity, char *xmsg, int xcode, size_t bytes_sofar, size_t bytes_max, void * ptr TSRMLS_DC) { - zval *callback = (zval*)context->notifier->ptr; + zval *callback = &context->notifier->ptr; zval retval; zval zvs[6]; int i; @@ -900,9 +900,9 @@ static void user_space_stream_notifier(php_stream_context *context, int notifyco static void user_space_stream_notifier_dtor(php_stream_notifier *notifier) { - if (notifier && notifier->ptr) { - zval_ptr_dtor((zval*)(notifier->ptr)); - notifier->ptr = NULL; + if (notifier && Z_TYPE(notifier->ptr) != IS_UNDEF) { + zval_ptr_dtor(&notifier->ptr); + ZVAL_UNDEF(&notifier->ptr); } } @@ -951,8 +951,7 @@ static int parse_context_params(php_stream_context *context, zval *params TSRMLS context->notifier = php_stream_notification_alloc(); context->notifier->func = user_space_stream_notifier; - context->notifier->ptr = tmp; - if (Z_REFCOUNTED_P(tmp)) Z_ADDREF_P(tmp); + ZVAL_COPY(&context->notifier->ptr, tmp); context->notifier->dtor = user_space_stream_notifier_dtor; } if (NULL != (tmp = zend_hash_str_find(Z_ARRVAL_P(params), "options", sizeof("options")-1))) { @@ -1090,12 +1089,12 @@ PHP_FUNCTION(stream_context_get_params) } array_init(return_value); - if (context->notifier && context->notifier->ptr && context->notifier->func == user_space_stream_notifier) { - add_assoc_zval_ex(return_value, ZEND_STRS("notification"), context->notifier->ptr); - if (Z_REFCOUNTED_P((zval*)context->notifier->ptr)) Z_ADDREF_P(context->notifier->ptr); + if (context->notifier && Z_TYPE(context->notifier->ptr) != IS_UNDEF && context->notifier->func == user_space_stream_notifier) { + add_assoc_zval_ex(return_value, "notification", sizeof("notification")-1, &context->notifier->ptr); + if (Z_REFCOUNTED(context->notifier->ptr)) Z_ADDREF(context->notifier->ptr); } ZVAL_ZVAL(&options, &context->options, 1, 0); - add_assoc_zval_ex(return_value, ZEND_STRS("options"), &options); + add_assoc_zval_ex(return_value, "options", sizeof("options")-1, &options); } /* }}} */ diff --git a/main/streams/php_stream_context.h b/main/streams/php_stream_context.h index 22c914c..bdfba8f 100644 --- a/main/streams/php_stream_context.h +++ b/main/streams/php_stream_context.h @@ -45,7 +45,7 @@ typedef struct _php_stream_notifier php_stream_notifier; struct _php_stream_notifier { php_stream_notification_func func; void (*dtor)(php_stream_notifier *notifier); - void *ptr; + zval ptr; int mask; size_t progress, progress_max; /* position for progress notification */ };

« previous php.cvs (#77611) next »