classification
Title: Poll returns POLLOUT on Pipe read endpoint on MacOS 10.14
Type: behavior Stage:
Components: Extension Modules, macOS Versions: Python 3.9, Python 3.7
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: ned.deily, ronaldoussoren, samh42
Priority: normal Keywords:

Created on 2021-07-10 11:02 by samh42, last changed 2021-07-13 06:35 by ronaldoussoren.

Messages (2)
msg397246 - (view) Author: Sam Harding (samh42) Date: 2021-07-10 11:02
The behaviour of select.poll() is inconsistent across MacOS versions, on MacOS Mojave (10.14.6) registering and polling the receiving channel of mp.Pipe(duplex=False) returns the event POLLOUT (ready to write to). This is verified by a colleagues setup.

Whereas on MacOS 11 the same scenario will not have poll() return that the receiving channel is ready for writing to (POLLOUT). 

Example:
###
import select
import multiprocessing as mp
recv_end, send_end = mp.Pipe(duplex=False)
poll = select.poll()
poll.register(recv_end)
print(poll.poll(1000))
###

MacOS 10.14.6 Result: 
> [(3,4)]

MacOS 11.0.1 Result:
> []

I am assuming that the MacOS 11 behaviour is should be the expected behaviour, and that the recv connection from a Pipe should never return that it is writable.

This was tested with Python 3.9.4, and 3.7.6.
msg397386 - (view) Author: Ronald Oussoren (ronaldoussoren) * (Python committer) Date: 2021-07-13 06:35
Without having looked at this issue in detail...

This looks like an issue with macOS and not Python. In general API's providing access to system calls are just thin wrappers around those system calls.  If this is a bug in macOS there's nothing we can do about this, other than perhaps working around the bug in stdlib usages of select.poll.
History
Date User Action Args
2021-07-13 06:35:52ronaldoussorensetmessages: + msg397386
2021-07-10 11:02:26samh42create