mountd: correctly handle poll() timeout case, solves possible 100% CPU load when idle (#7293)
SVN-Revision: 27635
This commit is contained in:
		| @@ -1,11 +1,11 @@ | |||||||
| # Copyright (C) 2009-2010 OpenWrt.org | # Copyright (C) 2009-2011 OpenWrt.org | ||||||
| # All rights reserved. | # All rights reserved. | ||||||
|  |  | ||||||
| include $(TOPDIR)/rules.mk | include $(TOPDIR)/rules.mk | ||||||
|  |  | ||||||
| PKG_NAME:=mountd | PKG_NAME:=mountd | ||||||
| PKG_VERSION:=0.1 | PKG_VERSION:=0.1 | ||||||
| PKG_RELEASE:=3 | PKG_RELEASE:=4 | ||||||
|  |  | ||||||
| PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 | PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 | ||||||
| PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources | PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources | ||||||
|   | |||||||
							
								
								
									
										32
									
								
								package/mountd/patches/020-handle_timeout.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								package/mountd/patches/020-handle_timeout.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | --- a/lib/autofs.c | ||||||
|  | +++ b/lib/autofs.c | ||||||
|  | @@ -140,6 +140,7 @@ static int fullread(void *ptr, size_t le | ||||||
|  |   | ||||||
|  |  static int autofs_in(union autofs_v5_packet_union *pkt) | ||||||
|  |  { | ||||||
|  | +	int res; | ||||||
|  |  	struct pollfd fds[1]; | ||||||
|  |   | ||||||
|  |  	fds[0].fd = fdout; | ||||||
|  | @@ -147,15 +148,19 @@ static int autofs_in(union autofs_v5_pac | ||||||
|  |   | ||||||
|  |  	while(1) | ||||||
|  |  	{ | ||||||
|  | -		if(poll(fds, 2, 1000) == -1) | ||||||
|  | +		res = poll(fds, 1, -1); | ||||||
|  | + | ||||||
|  | +		if (res == -1) | ||||||
|  |  		{ | ||||||
|  |  			if (errno == EINTR) | ||||||
|  |  				continue; | ||||||
|  |  			log_printf("failed while trying to read packet from kernel\n"); | ||||||
|  |  			return -1; | ||||||
|  |  		} | ||||||
|  | -		if(fds[0].revents & POLLIN) | ||||||
|  | +		else if ((res > 0) && (fds[0].revents & POLLIN)) | ||||||
|  | +		{ | ||||||
|  |  			return fullread(pkt, sizeof(*pkt)); | ||||||
|  | +		} | ||||||
|  |  	} | ||||||
|  |  } | ||||||
|  |   | ||||||
		Reference in New Issue
	
	Block a user
	 Jo-Philipp Wich
					Jo-Philipp Wich