svlogd: if processor's stdin can not be opened, do not try ad infinitum
function old new delta processorstart 426 423 -3 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		@@ -412,19 +412,32 @@ static void processorstart(struct logdir *ld)
 | 
			
		||||
		int fd;
 | 
			
		||||
 | 
			
		||||
		/* child */
 | 
			
		||||
		/* Non-ignored signals revert to SIG_DFL on exec anyway */
 | 
			
		||||
		/* Non-ignored signals revert to SIG_DFL on exec anyway.
 | 
			
		||||
		 * But we can get signals BEFORE execl(), this is unlikely
 | 
			
		||||
		 * but wouldn't be good...
 | 
			
		||||
		 */
 | 
			
		||||
		/*bb_signals(0
 | 
			
		||||
			+ (1 << SIGTERM)
 | 
			
		||||
			//+ (1 << SIGCHLD)
 | 
			
		||||
			+ (1 << SIGALRM)
 | 
			
		||||
			+ (1 << SIGHUP)
 | 
			
		||||
			, SIG_DFL);*/
 | 
			
		||||
		sig_unblock(SIGTERM);
 | 
			
		||||
		sig_unblock(SIGALRM);
 | 
			
		||||
		sig_unblock(SIGHUP);
 | 
			
		||||
		/* runit 2.1.2 does not unblock SIGCHLD, a bug? we do: */
 | 
			
		||||
		sigprocmask(SIG_UNBLOCK, &blocked_sigset, NULL);
 | 
			
		||||
 | 
			
		||||
		if (verbose)
 | 
			
		||||
			bb_error_msg(INFO"processing: %s/%s", ld->name, ld->fnsave);
 | 
			
		||||
		fd = xopen(ld->fnsave, O_RDONLY|O_NDELAY);
 | 
			
		||||
 | 
			
		||||
		fd = open_or_warn(ld->fnsave, O_RDONLY|O_NDELAY);
 | 
			
		||||
		/* Used to have xopen() above, but it causes infinite restarts of processor
 | 
			
		||||
		 * if file is gone - which can happen even because of _us_!
 | 
			
		||||
		 * Users report that if on reboot, time is reset to before existing
 | 
			
		||||
		 * logfiles creation time, rmoldest() deletes the newest logfile (!)
 | 
			
		||||
		 * and we end up here trying to open this now-deleted file.
 | 
			
		||||
		 */
 | 
			
		||||
		if (fd < 0)
 | 
			
		||||
			_exit(0); /* fake "success": do not run processor again */
 | 
			
		||||
 | 
			
		||||
		xmove_fd(fd, 0);
 | 
			
		||||
		ld->fnsave[26] = 't'; /* <- that's why we need sv_ch! */
 | 
			
		||||
		fd = xopen(ld->fnsave, O_WRONLY|O_NDELAY|O_TRUNC|O_CREAT);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user