mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-10-29 05:40:12 -04:00 
			
		
		
		
	render/gbm_allocator: duplicate drm fd during creation process
This commit is contained in:
		
							parent
							
								
									d0c1f0c0b6
								
							
						
					
					
						commit
						2c90e0f521
					
				
					 3 changed files with 9 additions and 7 deletions
				
			
		|  | @ -26,7 +26,7 @@ struct wlr_gbm_allocator { | |||
| /**
 | ||||
|  * Creates a new GBM allocator from a DRM FD. | ||||
|  * | ||||
|  * Takes ownership over the FD. | ||||
|  * Does not take ownership over the FD. | ||||
|  */ | ||||
| struct wlr_allocator *wlr_gbm_allocator_create(int drm_fd); | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,6 +1,5 @@ | |||
| #define _POSIX_C_SOURCE 200809L | ||||
| #include <assert.h> | ||||
| #include <fcntl.h> | ||||
| #include <stdlib.h> | ||||
| #include <wlr/util/log.h> | ||||
| #include <xf86drm.h> | ||||
|  | @ -29,10 +28,7 @@ struct wlr_allocator *allocator_autocreate_with_drm_fd( | |||
| 	if ((backend_caps & gbm_caps) && (renderer_caps & gbm_caps) | ||||
| 			&& drm_fd != -1) { | ||||
| 		wlr_log(WLR_DEBUG, "Trying to create gbm allocator"); | ||||
| 		int fd = fcntl(drm_fd, F_DUPFD_CLOEXEC, 0); | ||||
| 		if (fd < 0) { | ||||
| 			wlr_log(WLR_ERROR, "fcntl(F_DUPFD_CLOEXEC) failed"); | ||||
| 		} else if ((alloc = wlr_gbm_allocator_create(fd)) != NULL) { | ||||
| 		if ((alloc = wlr_gbm_allocator_create(drm_fd)) != NULL) { | ||||
| 			return alloc; | ||||
| 		} | ||||
| 		wlr_log(WLR_DEBUG, "Failed to create gbm allocator"); | ||||
|  |  | |||
|  | @ -159,7 +159,13 @@ static struct wlr_gbm_allocator *get_gbm_alloc_from_alloc( | |||
| 	return (struct wlr_gbm_allocator *)alloc; | ||||
| } | ||||
| 
 | ||||
| struct wlr_allocator *wlr_gbm_allocator_create(int fd) { | ||||
| struct wlr_allocator *wlr_gbm_allocator_create(int drm_fd) { | ||||
| 	int fd = fcntl(drm_fd, F_DUPFD_CLOEXEC, 0); | ||||
| 	if (fd < 0) { | ||||
| 		wlr_log(WLR_ERROR, "fcntl(F_DUPFD_CLOEXEC) failed"); | ||||
| 		return NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	uint64_t cap; | ||||
| 	if (drmGetCap(fd, DRM_CAP_PRIME, &cap) || | ||||
| 			!(cap & DRM_PRIME_CAP_EXPORT)) { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Simon Zeni
						Simon Zeni