diff options
| -rw-r--r-- | include/seat.h | 1 | ||||
| -rw-r--r-- | seatd/seat.c | 51 | 
2 files changed, 16 insertions, 36 deletions
| diff --git a/include/seat.h b/include/seat.h index fa5873c..cc243b6 100644 --- a/include/seat.h +++ b/include/seat.h @@ -33,7 +33,6 @@ struct seat {  	struct client *next_client;  	bool vt_bound; -	int cur_ttyfd;  	int cur_vt;  	int session_cnt;  }; diff --git a/seatd/seat.c b/seatd/seat.c index 9ad4af2..842928e 100644 --- a/seatd/seat.c +++ b/seatd/seat.c @@ -19,7 +19,7 @@  #include "terminal.h"  static int seat_close_client(struct client *client); -static void vt_close(struct seat *seat); +static int vt_close(int vt);  struct seat *seat_create(const char *seat_name, bool vt_bound) {  	struct seat *seat = calloc(1, sizeof(struct seat)); @@ -30,7 +30,6 @@ struct seat *seat_create(const char *seat_name, bool vt_bound) {  	seat->vt_bound = vt_bound;  	seat->seat_name = strdup(seat_name);  	seat->cur_vt = 0; -	seat->cur_ttyfd = -1;  	if (seat->seat_name == NULL) {  		free(seat);  		return NULL; @@ -50,7 +49,6 @@ void seat_destroy(struct seat *seat) {  		assert(client->seat == seat);  		client_destroy(client);  	} -	vt_close(seat);  	linked_list_remove(&seat->link);  	free(seat->seat_name);  	free(seat); @@ -66,47 +64,30 @@ static void seat_update_vt(struct seat *seat) {  	close(tty0fd);  } -static int vt_open(struct seat *seat, int vt) { +static int vt_open(int vt) {  	assert(vt != -1); -	if (seat->cur_ttyfd != -1) { -		terminal_set_process_switching(seat->cur_ttyfd, true); -		close(seat->cur_ttyfd); -	} -	seat->cur_ttyfd = terminal_open(vt); -	if (seat->cur_ttyfd == -1) { +	int ttyfd = terminal_open(vt); +	if (ttyfd == -1) {  		log_errorf("Could not open terminal for VT %d: %s", vt, strerror(errno));  		return -1;  	} -	terminal_set_process_switching(seat->cur_ttyfd, true); -	terminal_set_keyboard(seat->cur_ttyfd, false); -	terminal_set_graphics(seat->cur_ttyfd, true); +	terminal_set_process_switching(ttyfd, true); +	terminal_set_keyboard(ttyfd, false); +	terminal_set_graphics(ttyfd, true); +	close(ttyfd);  	return 0;  } -static void vt_close_fd(int fd) { -	terminal_set_process_switching(fd, true); -	terminal_set_keyboard(fd, true); -	terminal_set_graphics(fd, false); -} - -static void vt_close(struct seat *seat) { -	if (seat->cur_ttyfd == -1) { -		return; -	} - -	vt_close_fd(seat->cur_ttyfd); -	close(seat->cur_ttyfd); -	seat->cur_ttyfd = -1; -} - -static int vt_close_num(int vt) { +static int vt_close(int vt) {  	int ttyfd = terminal_open(vt);  	if (ttyfd == -1) {  		log_errorf("Could not open terminal to clean up VT %d: %s", vt, strerror(errno));  		return -1;  	} -	vt_close_fd(ttyfd); +	terminal_set_process_switching(ttyfd, true); +	terminal_set_keyboard(ttyfd, true); +	terminal_set_graphics(ttyfd, false);  	close(ttyfd);  	return 0;  } @@ -452,7 +433,7 @@ int seat_open_client(struct seat *seat, struct client *client) {  		return -1;  	} -	if (seat->vt_bound && vt_open(seat, client->session) == -1) { +	if (seat->vt_bound && vt_open(client->session) == -1) {  		log_error("Could not open VT for client");  		goto error;  	} @@ -477,7 +458,7 @@ int seat_open_client(struct seat *seat, struct client *client) {  error:  	if (seat->vt_bound) { -		vt_close(seat); +		vt_close(seat->cur_vt);  	}  	return -1;  } @@ -506,12 +487,12 @@ static int seat_close_client(struct client *client) {  			// This client was current, but there were no clients  			// waiting to take this VT, so clean it up.  			log_debug("Closing active VT"); -			vt_close(seat); +			vt_close(seat->cur_vt);  		} else if (!was_current && client->state != CLIENT_CLOSED) {  			// This client was not current, but as the client was  			// running, we need to clean up the VT.  			log_debug("Closing inactive VT"); -			vt_close_num(client->session); +			vt_close(client->session);  		}  	} | 
