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

Reply via email to