diff options
| -rw-r--r-- | runloop.c | 8 | 
1 files changed, 6 insertions, 2 deletions
| @@ -1,4 +1,5 @@  #include <string.h> +#include <errno.h>  #include <sys/select.h>  #include "runloop.h" @@ -39,11 +40,14 @@ void runloop_run(void){  			if(fd_list[i].fd>maxfd)maxfd=fd_list[i].fd;  		}  		int ret=select(maxfd+1,&inset,NULL,NULL,NULL); -		if(ret<=0)die_perror("select"); +		if(ret<=0){ +			if(errno==EINTR)continue; +			die_perror("select"); +		}  		for(size_t i=0;i<fd_list_len;i++){  			if(FD_ISSET(fd_list[i].fd,&inset)){  				if(fd_list[i].func(fd_list[i].fd)){ -					memmove(fd_list+i,fd_list+i+1,fd_list_len-i-1); +					memmove(fd_list+i,fd_list+i+1,(fd_list_len-i-1)*sizeof(struct fd_list_item));  					i--;  					fd_list_len--;  				} | 
