@ -544,13 +544,8 @@ device_added(struct udev_device *udev_device, struct evdev_input *master) 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					device_removed ( struct  udev_device  * udev_device ,  struct  evdev_input  * master )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					device_removed ( struct  evdev_input_device  * device )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						const  char  * devnode  =  udev_device_get_devnode ( udev_device ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  evdev_input_device  * device ,  * next ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						wl_list_for_each_safe ( device ,  next ,  & master - > devices_list ,  link )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							if  ( ! strcmp ( device - > devnode ,  devnode ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						wl_event_source_remove ( device - > source ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						wl_list_remove ( & device - > link ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( device - > mtdev )   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -558,9 +553,6 @@ device_removed(struct udev_device *udev_device, struct evdev_input *master) 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						close ( device - > fd ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						free ( device - > devnode ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						free ( device ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								break ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					void  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -604,7 +596,9 @@ evdev_udev_handler(int fd, uint32_t mask, void *data) 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  evdev_input  * master  =  data ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  udev_device  * udev_device ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  evdev_input_device  * device ,  * next ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						const  char  * action ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						const  char  * devnode ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						udev_device  =  udev_monitor_receive_device ( master - > udev_monitor ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( ! udev_device )   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -618,8 +612,15 @@ evdev_udev_handler(int fd, uint32_t mask, void *data) 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							if  ( ! strcmp ( action ,  " add " ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								device_added ( udev_device ,  master ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							else  if  ( ! strcmp ( action ,  " remove " ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								device_removed ( udev_device ,  master ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							else  if  ( ! strcmp ( action ,  " remove " ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								devnode  =  udev_device_get_devnode ( udev_device ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								wl_list_for_each_safe ( device ,  next ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										      & master - > devices_list ,  link )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									if  ( ! strcmp ( device - > devnode ,  devnode ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										device_removed ( device ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										break ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						udev_device_unref ( udev_device ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -685,13 +686,8 @@ evdev_remove_devices(struct weston_input_device *input_base) 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  evdev_input  * input  =  ( struct  evdev_input  * )  input_base ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  evdev_input_device  * device ,  * next ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        wl_list_for_each_safe ( device ,  next ,  & input - > devices_list ,  link )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							wl_event_source_remove ( device - > source ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							wl_list_remove ( & device - > link ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							close ( device - > fd ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							free ( device - > devnode ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							free ( device ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						wl_list_for_each_safe ( device ,  next ,  & input - > devices_list ,  link )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							device_removed ( device ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					void