pollita Fri Jun 27 12:23:58 2003 EDT
Modified files:
/php-src/ext/standard streamsfuncs.c
/php-src/main/streams streams.c php_stream_context.h
Log:
MFB
Plug leak in context notifiers, implement notifier->dtor
Index: php-src/ext/standard/streamsfuncs.c
diff -u php-src/ext/standard/streamsfuncs.c:1.22
php-src/ext/standard/streamsfuncs.c:1.23
--- php-src/ext/standard/streamsfuncs.c:1.22 Thu Jun 19 18:30:54 2003
+++ php-src/ext/standard/streamsfuncs.c Fri Jun 27 12:23:57 2003
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: streamsfuncs.c,v 1.22 2003/06/19 22:30:54 pollita Exp $ */
+/* $Id: streamsfuncs.c,v 1.23 2003/06/27 16:23:57 pollita Exp $ */
#include "php.h"
#include "php_globals.h"
@@ -631,6 +631,14 @@
}
}
+static void user_space_stream_notifier_dtor(php_stream_notifier *notifier)
+{
+ if (notifier && notifier->ptr) {
+ zval_ptr_dtor((zval **)&(notifier->ptr));
+ notifier->ptr = NULL;
+ }
+}
+
static int parse_context_options(php_stream_context *context, zval *options)
{
HashPosition pos, opos;
@@ -679,6 +687,7 @@
context->notifier->func = user_space_stream_notifier;
context->notifier->ptr = *tmp;
ZVAL_ADDREF(*tmp);
+ context->notifier->dtor = user_space_stream_notifier_dtor;
}
if (SUCCESS == zend_hash_find(Z_ARRVAL_P(params), "options",
sizeof("options"), (void**)&tmp)) {
parse_context_options(context, *tmp);
Index: php-src/main/streams/streams.c
diff -u php-src/main/streams/streams.c:1.28 php-src/main/streams/streams.c:1.29
--- php-src/main/streams/streams.c:1.28 Fri Jun 27 00:27:18 2003
+++ php-src/main/streams/streams.c Fri Jun 27 12:23:58 2003
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: streams.c,v 1.28 2003/06/27 04:27:18 pollita Exp $ */
+/* $Id: streams.c,v 1.29 2003/06/27 16:23:58 pollita Exp $ */
#define _GNU_SOURCE
#include "php.h"
@@ -1649,6 +1649,9 @@
PHPAPI void php_stream_notification_free(php_stream_notifier *notifier)
{
+ if (notifier->dtor) {
+ notifier->dtor(notifier);
+ }
efree(notifier);
}
Index: php-src/main/streams/php_stream_context.h
diff -u php-src/main/streams/php_stream_context.h:1.5
php-src/main/streams/php_stream_context.h:1.6
--- php-src/main/streams/php_stream_context.h:1.5 Fri Jun 13 17:33:59 2003
+++ php-src/main/streams/php_stream_context.h Fri Jun 27 12:23:58 2003
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_stream_context.h,v 1.5 2003/06/13 21:33:59 pollita Exp $ */
+/* $Id: php_stream_context.h,v 1.6 2003/06/27 16:23:58 pollita Exp $ */
/* Stream context and status notification related definitions */
@@ -40,12 +40,15 @@
#define php_stream_context_to_zval(context, zval) { ZVAL_RESOURCE(zval,
(context)->rsrc_id); }
-typedef struct _php_stream_notifier {
+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;
int mask;
size_t progress, progress_max; /* position for progress notification */
-} php_stream_notifier;
+};
struct _php_stream_context {
php_stream_notifier *notifier;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php