com php-src: Fixed stream notifier: ext/standard/streamsfuncs.c main/streams/php_stream_context.h
| From: | Dmitry Stogov | 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(¬ifier->ptr);
+ ZVAL_UNDEF(¬ifier->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 */
};