I've been tracking down little errors in the APE select() function that cropped
up when trying to use Python's subprocess module. After a few too many hours
of investigation, I've come to the conclusion that the code that causes error
is intentional code to handle a specific case for X (I'll assume X11 until
corrected):
; diff /sys/src/ape/lib/ap/plan9/_buf.c _buf.c
292a293
> printf("no buffered %d\n", i);
294a296
> /*
298c300
< errno = EBADF; /* how X tells a client
is gone */
---
> errno = EBADF; // how X tells a client
> is gone
300a303
> */
By removing the above, Python code that uses subprocess.Popen(cmd, stdout=PIPE,
stderr=PIPE) will now work correctly, without having to resort to
os.popen3(cmd) attempts to get around the select.error: (4, 'Bad file number')
that would crop up without the change.
My question is: does anyone still use the X11 code based on APE? Is this
section safe to remove in sources? Or do you have additional recommendations
to work around the select() error?
If not, I'll prep a patch. Thanks.
-jas