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. | ||||
|  | ||||
| include $(TOPDIR)/rules.mk | ||||
|  | ||||
| PKG_NAME:=mountd | ||||
| PKG_VERSION:=0.1 | ||||
| PKG_RELEASE:=3 | ||||
| PKG_RELEASE:=4 | ||||
|  | ||||
| PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 | ||||
| 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