mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	Use SIGUSR2 for vt switching instead of SIGUSR1
Xwayland uses SIGUSR1 to signal readiness. With direct(-freebsd) session and Xwayland, wlroots was confusing the Xwayland readiness signal with a vt switch signal, freezing the desktop. Same problem was found in Weston in 2014: https://phabricator.freedesktop.org/T7080
This commit is contained in:
		
							parent
							
								
									71aa634ac5
								
							
						
					
					
						commit
						1ae944c071
					
				
					 3 changed files with 8 additions and 6 deletions
				
			
		| 
						 | 
					@ -148,8 +148,8 @@ static bool setup_tty(struct direct_session *session, struct wl_display *display
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct vt_mode mode = {
 | 
						struct vt_mode mode = {
 | 
				
			||||||
		.mode = VT_PROCESS,
 | 
							.mode = VT_PROCESS,
 | 
				
			||||||
		.relsig = SIGUSR1,
 | 
							.relsig = SIGUSR2,
 | 
				
			||||||
		.acqsig = SIGUSR1,
 | 
							.acqsig = SIGUSR2,
 | 
				
			||||||
		.frsig = SIGIO, // has to be set
 | 
							.frsig = SIGIO, // has to be set
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -159,7 +159,7 @@ static bool setup_tty(struct direct_session *session, struct wl_display *display
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct wl_event_loop *loop = wl_display_get_event_loop(display);
 | 
						struct wl_event_loop *loop = wl_display_get_event_loop(display);
 | 
				
			||||||
	session->vt_source = wl_event_loop_add_signal(loop, SIGUSR1,
 | 
						session->vt_source = wl_event_loop_add_signal(loop, SIGUSR2,
 | 
				
			||||||
		vt_handler, session);
 | 
							vt_handler, session);
 | 
				
			||||||
	if (!session->vt_source) {
 | 
						if (!session->vt_source) {
 | 
				
			||||||
		goto error;
 | 
							goto error;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -184,8 +184,8 @@ static bool setup_tty(struct direct_session *session, struct wl_display *display
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct vt_mode mode = {
 | 
						struct vt_mode mode = {
 | 
				
			||||||
		.mode = VT_PROCESS,
 | 
							.mode = VT_PROCESS,
 | 
				
			||||||
		.relsig = SIGUSR1,
 | 
							.relsig = SIGUSR2,
 | 
				
			||||||
		.acqsig = SIGUSR1,
 | 
							.acqsig = SIGUSR2,
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ioctl(fd, VT_SETMODE, &mode) < 0) {
 | 
						if (ioctl(fd, VT_SETMODE, &mode) < 0) {
 | 
				
			||||||
| 
						 | 
					@ -194,7 +194,7 @@ static bool setup_tty(struct direct_session *session, struct wl_display *display
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct wl_event_loop *loop = wl_display_get_event_loop(display);
 | 
						struct wl_event_loop *loop = wl_display_get_event_loop(display);
 | 
				
			||||||
	session->vt_source = wl_event_loop_add_signal(loop, SIGUSR1,
 | 
						session->vt_source = wl_event_loop_add_signal(loop, SIGUSR2,
 | 
				
			||||||
		vt_handler, session);
 | 
							vt_handler, session);
 | 
				
			||||||
	if (!session->vt_source) {
 | 
						if (!session->vt_source) {
 | 
				
			||||||
		goto error;
 | 
							goto error;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,7 +21,9 @@
 | 
				
			||||||
static const char *lock_fmt = "/tmp/.X%d-lock";
 | 
					static const char *lock_fmt = "/tmp/.X%d-lock";
 | 
				
			||||||
static const char *socket_dir = "/tmp/.X11-unix";
 | 
					static const char *socket_dir = "/tmp/.X11-unix";
 | 
				
			||||||
static const char *socket_fmt = "/tmp/.X11-unix/X%d";
 | 
					static const char *socket_fmt = "/tmp/.X11-unix/X%d";
 | 
				
			||||||
 | 
					#ifndef __linux__
 | 
				
			||||||
static const char *socket_fmt2 = "/tmp/.X11-unix/X%d_";
 | 
					static const char *socket_fmt2 = "/tmp/.X11-unix/X%d_";
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int open_socket(struct sockaddr_un *addr, size_t path_size) {
 | 
					static int open_socket(struct sockaddr_un *addr, size_t path_size) {
 | 
				
			||||||
	int fd, rc;
 | 
						int fd, rc;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue