On Wed, 2015-11-11 at 22:02 -0800, Keith Packard wrote: > @@ -1174,12 +1192,16 @@ SetNotifyFd(int fd, NotifyFdProcPtr notify, int mask, > void *data) > void > HandleNotifyFds(void) > { > - struct notify_fd *s, *next; > - > - xorg_list_for_each_entry_safe(s, next, ¬ify_fds, list) { > - if (FD_ISSET(s->fd, &LastSelectMask)) { > - s->notify(s->fd, X_NOTIFY_READ, s->data); > - } > + struct notify_fd *n, *next; > + > + xorg_list_for_each_entry_safe(n, next, ¬ify_fds, list) { > + int ready = 0; > + if ((n->mask & X_NOTIFY_READ) && FD_ISSET(n->fd, &LastSelectMask)) > + ready |= X_NOTIFY_READ; > + if ((n->mask & X_NOTIFY_WRITE) & FD_ISSET(n->fd, > &LastSelectWriteMask)) > + ready |= X_NOTIFY_WRITE; > + if (ready != 0) > + n->notify(n->fd, ready, n->data); > } > }
ISTR the server currently has a "write then read" strategy for deadlock avoidance (and accidentally better reliability when low on memory). Do we want to do that here too, and if we do, do we split this into walking the list twice to enforce the order, in case a caller has both flags set? - ajax _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel