mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	Merge pull request #2368 from RyanDwyer/handle-out-of-fds
Handle out-of-fd situations gracefully for transaction and urgent timers
This commit is contained in:
		
						commit
						e4b54ac16e
					
				
					 2 changed files with 18 additions and 3 deletions
				
			
		| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
#define _POSIX_C_SOURCE 200809L
 | 
					#define _POSIX_C_SOURCE 200809L
 | 
				
			||||||
 | 
					#include <errno.h>
 | 
				
			||||||
#include <stdbool.h>
 | 
					#include <stdbool.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
| 
						 | 
					@ -316,7 +317,14 @@ static void transaction_commit(struct sway_transaction *transaction) {
 | 
				
			||||||
		// Set up a timer which the views must respond within
 | 
							// Set up a timer which the views must respond within
 | 
				
			||||||
		transaction->timer = wl_event_loop_add_timer(server.wl_event_loop,
 | 
							transaction->timer = wl_event_loop_add_timer(server.wl_event_loop,
 | 
				
			||||||
				handle_timeout, transaction);
 | 
									handle_timeout, transaction);
 | 
				
			||||||
 | 
							if (transaction->timer) {
 | 
				
			||||||
			wl_event_source_timer_update(transaction->timer, txn_timeout_ms);
 | 
								wl_event_source_timer_update(transaction->timer, txn_timeout_ms);
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								wlr_log(WLR_ERROR, "Unable to create transaction timer (%s). "
 | 
				
			||||||
 | 
										"Some imperfect frames might be rendered.",
 | 
				
			||||||
 | 
										strerror(errno));
 | 
				
			||||||
 | 
								handle_timeout(transaction);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The debug tree shows the pending/live tree. Here is a good place to
 | 
						// The debug tree shows the pending/live tree. Here is a good place to
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
#define _XOPEN_SOURCE 700
 | 
					#define _XOPEN_SOURCE 700
 | 
				
			||||||
#define _POSIX_C_SOURCE 199309L
 | 
					#define _POSIX_C_SOURCE 199309L
 | 
				
			||||||
#include <assert.h>
 | 
					#include <assert.h>
 | 
				
			||||||
 | 
					#include <errno.h>
 | 
				
			||||||
#ifdef __linux__
 | 
					#ifdef __linux__
 | 
				
			||||||
#include <linux/input-event-codes.h>
 | 
					#include <linux/input-event-codes.h>
 | 
				
			||||||
#elif __FreeBSD__
 | 
					#elif __FreeBSD__
 | 
				
			||||||
| 
						 | 
					@ -696,8 +697,14 @@ void seat_set_focus_warp(struct sway_seat *seat,
 | 
				
			||||||
				config->urgent_timeout > 0) {
 | 
									config->urgent_timeout > 0) {
 | 
				
			||||||
			view->urgent_timer = wl_event_loop_add_timer(server.wl_event_loop,
 | 
								view->urgent_timer = wl_event_loop_add_timer(server.wl_event_loop,
 | 
				
			||||||
					handle_urgent_timeout, view);
 | 
										handle_urgent_timeout, view);
 | 
				
			||||||
 | 
								if (view->urgent_timer) {
 | 
				
			||||||
				wl_event_source_timer_update(view->urgent_timer,
 | 
									wl_event_source_timer_update(view->urgent_timer,
 | 
				
			||||||
						config->urgent_timeout);
 | 
											config->urgent_timeout);
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									wlr_log(WLR_ERROR, "Unable to create urgency timer (%s)",
 | 
				
			||||||
 | 
											strerror(errno));
 | 
				
			||||||
 | 
									handle_urgent_timeout(view);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			view_set_urgent(view, false);
 | 
								view_set_urgent(view, false);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue