mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
Fixed resource leak
This commit is contained in:
parent
7275306887
commit
449f3e6452
@ -202,9 +202,7 @@ struct _php_stream {
|
||||
* PHP_STREAM_FCLOSE_XXX as appropriate */
|
||||
int fclose_stdiocast;
|
||||
FILE *stdiocast; /* cache this, otherwise we might leak! */
|
||||
#if ZEND_DEBUG
|
||||
int __exposed; /* non-zero if exposed as a zval somewhere */
|
||||
#endif
|
||||
char *orig_path;
|
||||
|
||||
php_stream_context *context;
|
||||
@ -243,17 +241,12 @@ END_EXTERN_C()
|
||||
#define php_stream_alloc(ops, thisptr, persistent_id, mode) _php_stream_alloc((ops), (thisptr), (persistent_id), (mode) STREAMS_CC TSRMLS_CC)
|
||||
|
||||
#define php_stream_get_resource_id(stream) ((php_stream *)(stream))->res->handle
|
||||
#if ZEND_DEBUG
|
||||
/* use this to tell the stream that it is OK if we don't explicitly close it */
|
||||
# define php_stream_auto_cleanup(stream) { (stream)->__exposed++; }
|
||||
#define php_stream_auto_cleanup(stream) { (stream)->__exposed++; }
|
||||
/* use this to assign the stream to a zval and tell the stream that is
|
||||
* has been exported to the engine; it will expect to be closed automatically
|
||||
* when the resources are auto-destructed */
|
||||
# define php_stream_to_zval(stream, zval) { ZVAL_RES(zval, (stream)->res); (stream)->__exposed++; }
|
||||
#else
|
||||
# define php_stream_auto_cleanup(stream) /* nothing */
|
||||
# define php_stream_to_zval(stream, zval) { ZVAL_RES(zval, (stream)->res); }
|
||||
#endif
|
||||
#define php_stream_to_zval(stream, zval) { ZVAL_RES(zval, (stream)->res); (stream)->__exposed++; }
|
||||
|
||||
#define php_stream_from_zval(xstr, pzval) ZEND_FETCH_RESOURCE2((xstr), php_stream *, (pzval), -1, "stream", php_file_le_stream(), php_file_le_pstream())
|
||||
#define php_stream_from_zval_no_verify(xstr, pzval) (xstr) = (php_stream*)zend_fetch_resource((pzval) TSRMLS_CC, -1, "stream", NULL, 2, php_file_le_stream(), php_file_le_pstream())
|
||||
|
@ -466,6 +466,10 @@ fprintf(stderr, "stream_free: %s:%p[%s] preserve_handle=%d release_cast=%d remov
|
||||
//??? while (zend_list_delete(stream->res) == SUCCESS) {}
|
||||
//??? stream->res->gc.refcount = 0;
|
||||
zend_list_close(stream->res);
|
||||
if (!stream->__exposed) {
|
||||
zend_list_delete(stream->res);
|
||||
stream->res = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (close_options & PHP_STREAM_FREE_CALL_DTOR) {
|
||||
|
Loading…
Reference in New Issue
Block a user