iliaa Tue Jul 29 14:26:34 2003 EDT Modified files: /php-src/main/streams streams.c /php-src/main php_streams.h /php-src/ext/standard file.c /php-src/ext/dba dba.c Log: Finalize the closing process of persistent streams. The current behavior/API is as follows: 1) To close a persistent use php_stream_pclose(), it will close the stream and remove it from the persistent list. 2) Inside PHP code only explicit fclose() will close persistent streams, all other actions such as unset() or assigning a value to stream handle will not. 3) Regular streams can still be closed by either fclose(), unset() or an assignment of a value to the stream handler. Index: php-src/main/streams/streams.c diff -u php-src/main/streams/streams.c:1.31 php-src/main/streams/streams.c:1.32 --- php-src/main/streams/streams.c:1.31 Mon Jul 28 14:57:28 2003 +++ php-src/main/streams/streams.c Tue Jul 29 14:26:34 2003 @@ -19,7 +19,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: streams.c,v 1.31 2003/07/28 18:57:28 iliaa Exp $ */ +/* $Id: streams.c,v 1.32 2003/07/29 18:26:34 iliaa Exp $ */ #define _GNU_SOURCE #include "php.h" @@ -254,7 +254,7 @@ static int _php_stream_free_persistent(list_entry *le, void *pStream TSRMLS_DC) { - return (le->ptr == pStream && !((php_stream *)pStream)->in_free); + return le->ptr == pStream; } PHPAPI int _php_stream_free(php_stream *stream, int close_options TSRMLS_DC) /* {{{ */ @@ -358,7 +358,7 @@ stream->readbuf = NULL; } - if (stream->is_persistent) { + if (stream->is_persistent && (close_options & PHP_STREAM_FREE_PERSISTENT)) { /* we don't work with *stream but need its value for comparison */ zend_hash_apply_with_argument(&EG(persistent_list), (apply_func_arg_t) _php_stream_free_persistent, stream TSRMLS_CC); } Index: php-src/main/php_streams.h diff -u php-src/main/php_streams.h:1.82 php-src/main/php_streams.h:1.83 --- php-src/main/php_streams.h:1.82 Sat Jun 28 07:24:47 2003 +++ php-src/main/php_streams.h Tue Jul 29 14:26:34 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_streams.h,v 1.82 2003/06/28 11:24:47 wez Exp $ */ +/* $Id: php_streams.h,v 1.83 2003/07/29 18:26:34 iliaa Exp $ */ #ifndef PHP_STREAMS_H #define PHP_STREAMS_H @@ -249,11 +249,14 @@ #define PHP_STREAM_FREE_RELEASE_STREAM 2 /* pefree(stream) */ #define PHP_STREAM_FREE_PRESERVE_HANDLE 4 /* tell ops->close to not close it's underlying handle */ #define PHP_STREAM_FREE_RSRC_DTOR 8 /* called from the resource list dtor */ +#define PHP_STREAM_FREE_PERSISTENT 16 /* manually freeing a persistent connection */ #define PHP_STREAM_FREE_CLOSE (PHP_STREAM_FREE_CALL_DTOR | PHP_STREAM_FREE_RELEASE_STREAM) #define PHP_STREAM_FREE_CLOSE_CASTED (PHP_STREAM_FREE_CLOSE | PHP_STREAM_FREE_PRESERVE_HANDLE) +#define PHP_STREAM_FREE_CLOSE_PERSISTENT (PHP_STREAM_FREE_CLOSE | PHP_STREAM_FREE_PERSISTENT) PHPAPI int _php_stream_free(php_stream *stream, int close_options TSRMLS_DC); #define php_stream_free(stream, close_options) _php_stream_free((stream), (close_options) TSRMLS_CC) #define php_stream_close(stream) _php_stream_free((stream), PHP_STREAM_FREE_CLOSE TSRMLS_CC) +#define php_stream_pclose(stream) _php_stream_free((stream), PHP_STREAM_FREE_CLOSE_PERSISTENT TSRMLS_CC) PHPAPI int _php_stream_seek(php_stream *stream, off_t offset, int whence TSRMLS_DC); #define php_stream_rewind(stream) _php_stream_seek((stream), 0L, SEEK_SET TSRMLS_CC) Index: php-src/ext/standard/file.c diff -u php-src/ext/standard/file.c:1.353 php-src/ext/standard/file.c:1.354 --- php-src/ext/standard/file.c:1.353 Mon Jul 28 10:42:42 2003 +++ php-src/ext/standard/file.c Tue Jul 29 14:26:34 2003 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: file.c,v 1.353 2003/07/28 14:42:42 iliaa Exp $ */ +/* $Id: file.c,v 1.354 2003/07/29 18:26:34 iliaa Exp $ */ /* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */ @@ -763,7 +763,11 @@ } php_stream_from_zval(stream, arg1); - zend_list_delete(stream->rsrc_id); + if (!stream->is_persistent) { + zend_list_delete(stream->rsrc_id); + } else { + php_stream_pclose(stream); + } RETURN_TRUE; } Index: php-src/ext/dba/dba.c diff -u php-src/ext/dba/dba.c:1.97 php-src/ext/dba/dba.c:1.98 --- php-src/ext/dba/dba.c:1.97 Wed Jul 16 18:55:02 2003 +++ php-src/ext/dba/dba.c Tue Jul 29 14:26:34 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dba.c,v 1.97 2003/07/16 22:55:02 helly Exp $ */ +/* $Id: dba.c,v 1.98 2003/07/29 18:26:34 iliaa Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -321,10 +321,18 @@ pefree(info->path, info->flags&DBA_PERSISTENT); } if (info->fp && info->fp!=info->lock.fp) { - php_stream_close(info->fp); + if(info->flags&DBA_PERSISTENT) { + php_stream_pclose(info->fp); + } else { + php_stream_close(info->fp); + } } if (info->lock.fp) { - php_stream_close(info->lock.fp); + if(info->flags&DBA_PERSISTENT) { + php_stream_pclose(info->lock.fp); + } else { + php_stream_close(info->lock.fp); + } } if (info->lock.name) { pefree(info->lock.name, info->flags&DBA_PERSISTENT);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php