[PATCH wayland 8/8] client: Use read preparation API in wl_display_dispatch_queue()

Bryce Harrington bryce at osg.samsung.com
Mon Oct 5 17:30:06 PDT 2015


On Fri, Oct 02, 2015 at 01:50:09PM -0700, Bryce Harrington wrote:
> On Fri, Oct 02, 2015 at 01:42:03PM -0700, Bryce Harrington wrote:
> > On Fri, Oct 02, 2015 at 05:32:59PM +0800, Jonas Ådahl wrote:
> > > Instead of doing things that do the equivalent of using
> > > wl_display_prepare_read() and friends, just use the public API. The
> > > only semantical difference is that we will now unlock and lock the mutex
> > > more times compared to before.
> > > 
> > > Signed-off-by: Jonas Ådahl <jadahl at gmail.com>
> 
> In this series, patches 1,2,3,5 are mainly doc cleanup and look fine to
> land.  If no one comments to the contrary by EOD today I'll just go
> ahead and land them.

Pushed:

remote: I: patch #60925 updated using rev e74cde739eee62be15d85ad62ce8b7c8bbd90d74
remote: I: patch #60924 updated using rev f755dbde26d817b5937d8cebc8aa55191bddaaf3
remote: I: patch #60926 updated using rev 5e0ed917744f2f881956e91ebe971073fd0a7c51
remote: I: patch #60928 updated using rev 99c34e58dbc9357527d374abf3bb5ca952d91942
remote: I: 4 patch(es) updated to state Accepted.
To ssh://git.freedesktop.org/git/wayland/wayland
   e0b2166..99c34e5  master -> master


>  On 4 I spotted a grammar issue but otherwise also
> looks good to go.
> 
> Patches 6-8 look to me like they deserve a bit deeper review.
> 
> Thanks,
> Bryce
> 
> 
> > > There is no real need to merge this patch, it only makes it easier to
> > > understand that the _dispatch(_queue)() functions are compatible with the
> > > prepare_read() family.
> > 
> > I'm all for making code more concise and clear.  Is there any concern
> > though that the added locking activity impacts performance negatively?
> > 
> > Technically I see nothing wrong with the implementation.
> > 
> > > Jonas
> > > 
> > > 
> > >  src/wayland-client.c | 35 ++++++++---------------------------
> > >  1 file changed, 8 insertions(+), 27 deletions(-)
> > > 
> > > diff --git a/src/wayland-client.c b/src/wayland-client.c
> > > index ca2495f..8f53f6f 100644
> > > --- a/src/wayland-client.c
> > > +++ b/src/wayland-client.c
> > > @@ -1507,15 +1507,9 @@ wl_display_dispatch_queue(struct wl_display *display,
> > >  	struct pollfd pfd[2];
> > >  	int ret;
> > >  
> > > -	pthread_mutex_lock(&display->mutex);
> > > -
> > > -	ret = dispatch_queue(display, queue);
> > > -	if (ret == -1)
> > > -		goto err_unlock;
> > > -	if (ret > 0) {
> > > -		pthread_mutex_unlock(&display->mutex);
> > > +	ret = wl_display_dispatch_queue_pending(display, queue);
> > > +	if (ret != 0)
> > >  		return ret;
> > > -	}
> > >  
> > >  	/* We ignore EPIPE here, so that we try to read events before
> > >  	 * returning an error.  When the compositor sends an error it
> > > @@ -1524,12 +1518,11 @@ wl_display_dispatch_queue(struct wl_display *display,
> > >  	ret = wl_connection_flush(display->connection);
> > >  	if (ret < 0 && errno != EAGAIN && errno != EPIPE) {
> > >  		display_fatal_error(display, errno);
> > > -		goto err_unlock;
> > > +		return -1;
> > >  	}
> > >  
> > > -	display->reader_count++;
> > > -
> > > -	pthread_mutex_unlock(&display->mutex);
> > > +	if (wl_display_prepare_read_queue(display, queue) != 0)
> > > +		return -1;
> > >  
> > >  	pfd[0].fd = display->fd;
> > >  	pfd[0].events = POLLIN;
> > > @@ -1542,22 +1535,10 @@ wl_display_dispatch_queue(struct wl_display *display,
> > >  		return -1;
> > >  	}
> > >  
> > > -	pthread_mutex_lock(&display->mutex);
> > > -
> > > -	if (read_events(display) == -1)
> > > -		goto err_unlock;
> > > -
> > > -	ret = dispatch_queue(display, queue);
> > > -	if (ret == -1)
> > > -		goto err_unlock;
> > > -
> > > -	pthread_mutex_unlock(&display->mutex);
> > > -
> > > -	return ret;
> > > +	if (wl_display_read_events(display) == -1)
> > > +		return -1;
> > >  
> > > - err_unlock:
> > > -	pthread_mutex_unlock(&display->mutex);
> > > -	return -1;
> > > +	return wl_display_dispatch_queue_pending(display, queue);
> > >  }
> > >  
> > >  /** Dispatch pending events in an event queue
> > > -- 
> > > 2.4.3
> > > 
> > > _______________________________________________
> > > wayland-devel mailing list
> > > wayland-devel at lists.freedesktop.org
> > > http://lists.freedesktop.org/mailman/listinfo/wayland-devel
> > _______________________________________________
> > wayland-devel mailing list
> > wayland-devel at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/wayland-devel
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list