1--TEST--
2Check if multiple filters are closed correctly and never called again after close
3--FILE--
4<?php
5
6class FirstFilter extends php_user_filter {
7	public function filter($in, $out, &$consumed, $closing) {
8		static $closed = 0;
9
10		while ($bucket = stream_bucket_make_writeable($in)) {
11			stream_bucket_append($out, stream_bucket_new($this->stream, $bucket->data));
12		}
13
14		if ($closing) {
15			$closed++;
16		}
17
18		if ($closed > 0) {
19			var_dump($closed++);
20		}
21		return PSFS_PASS_ON;
22	}
23}
24
25class SecondFilter extends php_user_filter {
26	public function filter($in, $out, &$consumed, $closing) {
27		static $closed = 0;
28
29		while ($bucket = stream_bucket_make_writeable($in)) {
30			stream_bucket_append($out, stream_bucket_new($this->stream, $bucket->data));
31		}
32
33		if ($closing) {
34			$closed++;
35		}
36
37		if ($closed > 0) {
38			var_dump($closed++);
39		}
40		return PSFS_PASS_ON;
41	}
42}
43
44$r = fopen("php://stdout", "w+");
45stream_filter_register("first", "FirstFilter");
46stream_filter_register("second", "SecondFilter");
47$first = stream_filter_prepend($r, "first", STREAM_FILTER_WRITE, []);
48$second = stream_filter_prepend($r, "second", STREAM_FILTER_WRITE, []);
49fwrite($r, "test\n");
50stream_filter_remove($second);
51stream_filter_remove($first);
52?>
53--EXPECT--
54test
55int(1)
56int(1)
57