From: Wez Furlong Date: Mon, 19 May 2003 22:58:34 +0000 (+0000) Subject: MFB fix for persistent streams recycling. X-Git-Tag: RELEASE_1_0_2~716 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=192f632e2e7e3fca4656a60e42b2d5fef0986887;p=php MFB fix for persistent streams recycling. --- diff --git a/main/streams/streams.c b/main/streams/streams.c index 286f8a6452..5d6ef4fc21 100755 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -80,16 +80,14 @@ PHP_RSHUTDOWN_FUNCTION(streams) PHPAPI int php_stream_from_persistent_id(const char *persistent_id, php_stream **stream TSRMLS_DC) { - list_entry *le; + zend_rsrc_list_entry *le; if (zend_hash_find(&EG(persistent_list), (char*)persistent_id, strlen(persistent_id)+1, (void*) &le) == SUCCESS) { if (Z_TYPE_P(le) == le_pstream) { if (stream) { *stream = (php_stream*)le->ptr; - if ((*stream)->rsrc_id == FAILURE) { - /* first access this request; give it a valid id */ - (*stream)->rsrc_id = ZEND_REGISTER_RESOURCE(NULL, *stream, le_pstream); - } + le->refcount++; + (*stream)->rsrc_id = ZEND_REGISTER_RESOURCE(NULL, *stream, le_pstream); } return PHP_STREAM_PERSISTENT_SUCCESS; } @@ -217,14 +215,15 @@ fprintf(stderr, "stream_alloc: %s:%p persistent=%s\n", ops->label, ret, persiste } if (persistent_id) { - list_entry le; + zend_rsrc_list_entry le; Z_TYPE(le) = le_pstream; le.ptr = ret; + le.refcount = 0; if (FAILURE == zend_hash_update(&EG(persistent_list), (char *)persistent_id, strlen(persistent_id) + 1, - (void *)&le, sizeof(list_entry), NULL)) { + (void *)&le, sizeof(le), NULL)) { pefree(ret, 1); return NULL;