mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	backend/session: add assertions
This commit is contained in:
		
							parent
							
								
									6c05f17a25
								
							
						
					
					
						commit
						07ea98dab9
					
				
					 3 changed files with 34 additions and 13 deletions
				
			
		| 
						 | 
					@ -1,3 +1,4 @@
 | 
				
			||||||
 | 
					#include <assert.h>
 | 
				
			||||||
#include <dev/evdev/input.h>
 | 
					#include <dev/evdev/input.h>
 | 
				
			||||||
#include <errno.h>
 | 
					#include <errno.h>
 | 
				
			||||||
#include <fcntl.h>
 | 
					#include <fcntl.h>
 | 
				
			||||||
| 
						 | 
					@ -32,8 +33,14 @@ struct direct_session {
 | 
				
			||||||
	struct wl_event_source *vt_source;
 | 
						struct wl_event_source *vt_source;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct direct_session *direct_session_from_session(
 | 
				
			||||||
 | 
							struct wlr_session *base) {
 | 
				
			||||||
 | 
						assert(base->impl == &session_direct);
 | 
				
			||||||
 | 
						return (struct direct_session *)base;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int direct_session_open(struct wlr_session *base, const char *path) {
 | 
					static int direct_session_open(struct wlr_session *base, const char *path) {
 | 
				
			||||||
	struct direct_session *session = wl_container_of(base, session, base);
 | 
						struct direct_session *session = direct_session_from_session(base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int fd = direct_ipc_open(session->sock, path);
 | 
						int fd = direct_ipc_open(session->sock, path);
 | 
				
			||||||
	if (fd < 0) {
 | 
						if (fd < 0) {
 | 
				
			||||||
| 
						 | 
					@ -46,7 +53,7 @@ static int direct_session_open(struct wlr_session *base, const char *path) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void direct_session_close(struct wlr_session *base, int fd) {
 | 
					static void direct_session_close(struct wlr_session *base, int fd) {
 | 
				
			||||||
	struct direct_session *session = wl_container_of(base, session, base);
 | 
						struct direct_session *session = direct_session_from_session(base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int ev;
 | 
						int ev;
 | 
				
			||||||
	struct drm_version dv = {0};
 | 
						struct drm_version dv = {0};
 | 
				
			||||||
| 
						 | 
					@ -60,12 +67,12 @@ static void direct_session_close(struct wlr_session *base, int fd) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool direct_change_vt(struct wlr_session *base, unsigned vt) {
 | 
					static bool direct_change_vt(struct wlr_session *base, unsigned vt) {
 | 
				
			||||||
	struct direct_session *session = wl_container_of(base, session, base);
 | 
						struct direct_session *session = direct_session_from_session(base);
 | 
				
			||||||
	return ioctl(session->tty_fd, VT_ACTIVATE, (int)vt) == 0;
 | 
						return ioctl(session->tty_fd, VT_ACTIVATE, (int)vt) == 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void direct_session_destroy(struct wlr_session *base) {
 | 
					static void direct_session_destroy(struct wlr_session *base) {
 | 
				
			||||||
	struct direct_session *session = wl_container_of(base, session, base);
 | 
						struct direct_session *session = direct_session_from_session(base);
 | 
				
			||||||
	struct vt_mode mode = {
 | 
						struct vt_mode mode = {
 | 
				
			||||||
		.mode = VT_AUTO,
 | 
							.mode = VT_AUTO,
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
| 
						 | 
					@ -157,7 +164,8 @@ static bool setup_tty(struct direct_session *session, struct wl_display *display
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ioctl(fd, KDSKBMODE, K_CODE)) {
 | 
						if (ioctl(fd, KDSKBMODE, K_CODE)) {
 | 
				
			||||||
		wlr_log_errno(WLR_ERROR, "Failed to set keyboard mode K_CODE on tty %d", tty);
 | 
							wlr_log_errno(WLR_ERROR,
 | 
				
			||||||
 | 
								"Failed to set keyboard mode K_CODE on tty %d", tty);
 | 
				
			||||||
		goto error;
 | 
							goto error;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
#define _POSIX_C_SOURCE 200809L
 | 
					#define _POSIX_C_SOURCE 200809L
 | 
				
			||||||
 | 
					#include <assert.h>
 | 
				
			||||||
#include <errno.h>
 | 
					#include <errno.h>
 | 
				
			||||||
#include <fcntl.h>
 | 
					#include <fcntl.h>
 | 
				
			||||||
#include <linux/input.h>
 | 
					#include <linux/input.h>
 | 
				
			||||||
| 
						 | 
					@ -33,8 +34,14 @@ struct direct_session {
 | 
				
			||||||
	struct wl_event_source *vt_source;
 | 
						struct wl_event_source *vt_source;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct direct_session *direct_session_from_session(
 | 
				
			||||||
 | 
							struct wlr_session *base) {
 | 
				
			||||||
 | 
						assert(base->impl == &session_direct);
 | 
				
			||||||
 | 
						return (struct direct_session *)base;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int direct_session_open(struct wlr_session *base, const char *path) {
 | 
					static int direct_session_open(struct wlr_session *base, const char *path) {
 | 
				
			||||||
	struct direct_session *session = wl_container_of(base, session, base);
 | 
						struct direct_session *session = direct_session_from_session(base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int fd = direct_ipc_open(session->sock, path);
 | 
						int fd = direct_ipc_open(session->sock, path);
 | 
				
			||||||
	if (fd < 0) {
 | 
						if (fd < 0) {
 | 
				
			||||||
| 
						 | 
					@ -57,7 +64,7 @@ static int direct_session_open(struct wlr_session *base, const char *path) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void direct_session_close(struct wlr_session *base, int fd) {
 | 
					static void direct_session_close(struct wlr_session *base, int fd) {
 | 
				
			||||||
	struct direct_session *session = wl_container_of(base, session, base);
 | 
						struct direct_session *session = direct_session_from_session(base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct stat st;
 | 
						struct stat st;
 | 
				
			||||||
	if (fstat(fd, &st) < 0) {
 | 
						if (fstat(fd, &st) < 0) {
 | 
				
			||||||
| 
						 | 
					@ -76,7 +83,7 @@ static void direct_session_close(struct wlr_session *base, int fd) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool direct_change_vt(struct wlr_session *base, unsigned vt) {
 | 
					static bool direct_change_vt(struct wlr_session *base, unsigned vt) {
 | 
				
			||||||
	struct direct_session *session = wl_container_of(base, session, base);
 | 
						struct direct_session *session = direct_session_from_session(base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Only seat0 has VTs associated with it
 | 
						// Only seat0 has VTs associated with it
 | 
				
			||||||
	if (strcmp(session->base.seat, "seat0") != 0) {
 | 
						if (strcmp(session->base.seat, "seat0") != 0) {
 | 
				
			||||||
| 
						 | 
					@ -87,7 +94,7 @@ static bool direct_change_vt(struct wlr_session *base, unsigned vt) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void direct_session_destroy(struct wlr_session *base) {
 | 
					static void direct_session_destroy(struct wlr_session *base) {
 | 
				
			||||||
	struct direct_session *session = wl_container_of(base, session, base);
 | 
						struct direct_session *session = direct_session_from_session(base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (strcmp(session->base.seat, "seat0") == 0) {
 | 
						if (strcmp(session->base.seat, "seat0") == 0) {
 | 
				
			||||||
		struct vt_mode mode = {
 | 
							struct vt_mode mode = {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,8 +37,14 @@ struct logind_session {
 | 
				
			||||||
	char *path;
 | 
						char *path;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct logind_session *logind_session_from_session(
 | 
				
			||||||
 | 
							struct wlr_session *base) {
 | 
				
			||||||
 | 
						assert(base->impl == &session_logind);
 | 
				
			||||||
 | 
						return (struct logind_session *)base;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int logind_take_device(struct wlr_session *base, const char *path) {
 | 
					static int logind_take_device(struct wlr_session *base, const char *path) {
 | 
				
			||||||
	struct logind_session *session = wl_container_of(base, session, base);
 | 
						struct logind_session *session = logind_session_from_session(base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int ret;
 | 
						int ret;
 | 
				
			||||||
	int fd = -1;
 | 
						int fd = -1;
 | 
				
			||||||
| 
						 | 
					@ -83,7 +89,7 @@ error:
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void logind_release_device(struct wlr_session *base, int fd) {
 | 
					static void logind_release_device(struct wlr_session *base, int fd) {
 | 
				
			||||||
	struct logind_session *session = wl_container_of(base, session, base);
 | 
						struct logind_session *session = logind_session_from_session(base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int ret;
 | 
						int ret;
 | 
				
			||||||
	sd_bus_message *msg = NULL;
 | 
						sd_bus_message *msg = NULL;
 | 
				
			||||||
| 
						 | 
					@ -108,7 +114,7 @@ static void logind_release_device(struct wlr_session *base, int fd) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool logind_change_vt(struct wlr_session *base, unsigned vt) {
 | 
					static bool logind_change_vt(struct wlr_session *base, unsigned vt) {
 | 
				
			||||||
	struct logind_session *session = wl_container_of(base, session, base);
 | 
						struct logind_session *session = logind_session_from_session(base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Only seat0 has VTs associated with it
 | 
						// Only seat0 has VTs associated with it
 | 
				
			||||||
	if (strcmp(session->base.seat, "seat0") != 0) {
 | 
						if (strcmp(session->base.seat, "seat0") != 0) {
 | 
				
			||||||
| 
						 | 
					@ -212,7 +218,7 @@ static void release_control(struct logind_session *session) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void logind_session_destroy(struct wlr_session *base) {
 | 
					static void logind_session_destroy(struct wlr_session *base) {
 | 
				
			||||||
	struct logind_session *session = wl_container_of(base, session, base);
 | 
						struct logind_session *session = logind_session_from_session(base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	release_control(session);
 | 
						release_control(session);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue