mirror of
				https://gitlab.freedesktop.org/wayland/wayland.git
				synced 2025-11-03 09:01:42 -05:00 
			
		
		
		
	wayland-client: Treat EOF when reading the wayland socket as an error
If EOF is encountered while reading from the Wayland socket, make wl_display_read_events() return -1 so that it will be treated as an error. The documentation for this function states that it will set errno when there is an error so it additionally makes up an errno of EPIPE. If we don't do this then when the compositor quits the Wayland socket will be become ready for reading but wl_display_dispatch will do nothing which typically makes the application take up 100% CPU. In particular eglSwapBuffers will likely get stuck in an infinite busy loop because it repeatedly calls wl_display_dispatch_queue while it waits for the frame callback. https://bugzilla.gnome.org/show_bug.cgi?id=703892
This commit is contained in:
		
							parent
							
								
									4cffa0fd61
								
							
						
					
					
						commit
						12cea95593
					
				
					 1 changed files with 8 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -876,7 +876,15 @@ read_events(struct wl_display *display)
 | 
			
		|||
			if (errno != EAGAIN)
 | 
			
		||||
				display_fatal_error(display, errno);
 | 
			
		||||
			return -1;
 | 
			
		||||
		} else if (total == 0) {
 | 
			
		||||
			/* The compositor has closed the socket. This
 | 
			
		||||
			 * should be considered an error so we'll fake
 | 
			
		||||
			 * an errno */
 | 
			
		||||
			errno = EPIPE;
 | 
			
		||||
			display_fatal_error(display, errno);
 | 
			
		||||
			return -1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		for (rem = total; rem >= 8; rem -= size) {
 | 
			
		||||
			size = queue_event(display, rem);
 | 
			
		||||
			if (size == -1) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue