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

Reply via email to