On Fri, Jul 30, 2021 at 12:47 PM Sandeep Patil sspatil@android.com wrote:
aren't we supposed to wakeup on each write in level-triggered (default) case though?
No.
The thing about level triggered is that if the condition was already true, it would not need a wakeup in the first place.
Put another way: select() and poll() are both fundamentally level-triggered. If the condition was already true, they will return success immediately, and don't need any extraneous wakeups.
This is literally an epoll() confusion about what an "edge" is.
An edge is not "somebody wrote more data". An edge is "there was no data, now there is data".
And a level triggered event is *also* not "somebody wrote more data". A level-triggered signal is simply "there is data".
Notice how neither edge nor level are about "more data". One is about the edge of "no data" -> "some data", and the other is just a "data is available".
Sadly, it seems that our old "we'll wake things up whether needed or not" implementation ended up being something that people thought was edge-triggered semantics.
But we have the policy that regressions aren't about documentation or even sane behavior.
Regressions are about whether a user application broke in a noticeable way.
Linus