#49084 [Bgs]: PSFS_FEED_ME causes stream block

2009-07-31 Thread morrisdavidd at gmail dot com
 ID:   49084
 User updated by:  morrisdavidd at gmail dot com
 Reported By:  morrisdavidd at gmail dot com
 Status:   Bogus
 Bug Type: Streams related
 Operating System: Linux/Unix
 PHP Version:  5.3.0
 New Comment:

My code was not intended to be "real world", it was intended to accent
a bug. However, here's a slightly rewritten bug demonstration:
http://capricorn.physics.fsu.edu/~ddm05/bug_demo2.txt

With non-blocking I/O, I expect to see ~4 "Loop!" statements for each
timestamp, since "Loop!" echos every .5 sec and the timestamp echos
every 2 seconds.

P.S. The output should be the same as when the filter is removed.


Previous Comments:


[2009-07-31 16:57:43] j...@php.net

Well, your test is inherently buggy. You never return PSFS_PASS_ON from
the filter to begin with. And yes, to get this really working you HAVE
to use fread(). 



[2009-07-30 02:42:09] morrisdavidd at gmail dot com

Yes, that is what I expect to see.

To restate:
I do not expect to see an infinite number of "x"es on any non-block
read like you see in "bug_demo". I expect the non-block read to return
immediately resulting in another "Loop!" statement. i.e. I expect the
output of "bug_demo" with the "badFilter" to be the same as with the
"goodFilter" and the number of "x"es to be similar to the number of
"Loop!"s.)



[2009-07-29 23:15:16] j...@php.net

We must have different idea of "working" or this is what you expect:

$ sapi/cli/php -n working_demo.txt
bool(true)
Loop!
xLoop!
x

Now, what should this output?



[2009-07-29 19:00:30] morrisdavidd at gmail dot com

See:

http://capricorn.physics.fsu.edu/~ddm05/working_demo.txt

Or were you asking for something else?

The whole fgets vs fread thing shouldn't matter for this bug, I've came
across plenty of "you should use fgets instead of fread when not
blocking" statements before I submitted this code. So I did test fread
which had no changes with respect to the bug except more overhead to
extract separate lines.)



[2009-07-29 13:50:54] j...@php.net

Can you please provide reproducing scripts that actually give the
expected output with the "goodFilter" ?? And fyi, with non-blocking you
should use fread() instead of fgets()..



The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/49084

-- 
Edit this bug report at http://bugs.php.net/?id=49084&edit=1



#49084 [Bgs]: PSFS_FEED_ME causes stream block

2009-07-28 Thread jani
 ID:   49084
 Updated by:   j...@php.net
 Reported By:  morrisdavidd at gmail dot com
 Status:   Bogus
 Bug Type: Streams related
 Operating System: Linux/Unix
 PHP Version:  5.3.0
 New Comment:

nevermind, I forgot the proc_open params. :)


Previous Comments:


[2009-07-28 21:27:14] morrisdavidd at gmail dot com

According to:
http://us2.php.net/manual/en/function.proc-open.php

... descriptorspec ... "An array describing the pipe to pass to the
process. The first element is the descriptor type and the second element
is an option for the given type. Valid types are pipe (the second
element is either r to pass the read end of the pipe to the process, or
w to pass the write end) "

So I open "w" because I want to pass the write end to the process that
I've opened so the process can write to it (and I can read from it).

On same page, see Example 1:
"
$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will
read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will
write to
   2 => array("file", "/tmp/error-output.txt", "a") // stderr is a file
to write to
);
")



[2009-07-28 19:45:40] j...@php.net

Why do you open the pipe as writable one when you want to read from 
it..?



[2009-07-28 06:08:58] morrisdavidd at gmail dot com

Actual result is when leaving "badFilter".)



[2009-07-28 06:07:22] morrisdavidd at gmail dot com

Description:

According to:
http://us3.php.net/manual/en/function.stream-filter-register.php

The return value of PSFS_FEED_ME for the method filter of extended
classes of php_user_filter means: "Filter processed successfully,
however no data was available to return. More data is required from the
stream or prior filter."

However, using the return value of PSFS_FEED_ME also inadvertently
causes a block on stream read requests that should not be blocked (and
an infinite poll for data?).

Reproduce code:
---
bug_demo.php:
http://capricorn.physics.fsu.edu/~ddm05/bug_demo.txt

test2.php:
http://capricorn.physics.fsu.edu/~ddm05/test2.txt

Expected result:

When replacing the phrase "badFilter" with "goodFilter" in line 44:

bool(true)
Loop!
xLoop!
xxtest2: 1248760722
Loop!
xLoop!
xLoop!
xLoop!
xxtest2: 1248760724
Loop!
xLoop!
xLoop!
xLoop!
xxtest2: 1248760726
Loop!
...

Actual result:
--
bool(true)
Loop!
xxx...





-- 
Edit this bug report at http://bugs.php.net/?id=49084&edit=1