diff options
| author | David Oberhollenzer <david.oberhollenzer@tele2.at> | 2018-04-06 23:49:05 +0200 | 
|---|---|---|
| committer | David Oberhollenzer <david.oberhollenzer@tele2.at> | 2018-04-07 01:33:58 +0200 | 
| commit | ffb655126a7588ab9e1f56579ea2223f6f04c2ee (patch) | |
| tree | 5716cc095bc93c64e13018c2e0593566e066d036 | |
| parent | d0764e77b265bc1fc99456ddd3d3e3a088ef1f78 (diff) | |
Create init socket after reaching boot target
Filesystem might not be available before then.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@tele2.at>
| -rw-r--r-- | initd/main.c | 23 | 
1 files changed, 14 insertions, 9 deletions
diff --git a/initd/main.c b/initd/main.c index 5f85641..49bbee7 100644 --- a/initd/main.c +++ b/initd/main.c @@ -196,7 +196,7 @@ static void handle_tellinit(int ti_sock)  int main(void)  { -	int ti_sock, sfd, ret; +	int ti_sock = -1, sfd, ret, count;  	struct pollfd pfd[2];  	sigset_t mask; @@ -225,32 +225,37 @@ int main(void)  		return EXIT_FAILURE;  	} -	ti_sock = mksock(); -	if (ti_sock == -1) -		return EXIT_FAILURE; -  	if (setup_tty())  		return EXIT_FAILURE;  	memset(pfd, 0, sizeof(pfd));  	pfd[0].fd = sfd; -	pfd[1].fd = ti_sock; -	pfd[0].events = pfd[1].events = POLLIN; +	pfd[0].events = POLLIN; +	count = 1;  	for (;;) {  		if (!svclist_have_singleshot() && target != runlevel) {  			start_runlevel(target);  			runlevel = target; + +			if (target == TGT_BOOT && ti_sock == -1) { +				ti_sock = mksock(); +				if (ti_sock != -1) { +					pfd[1].fd = ti_sock; +					pfd[1].events = POLLIN; +					count = 2; +				} +			}  			continue;  		} -		ret = poll(pfd, sizeof(pfd) / sizeof(pfd[0]), -1); +		ret = poll(pfd, count, -1);  		if (ret > 0) {  			if (pfd[0].revents & POLLIN)  				handle_signal(sfd); -			if (pfd[1].revents & POLLIN) +			if (ti_sock != -1 && pfd[1].revents & POLLIN)  				handle_tellinit(ti_sock);  		}  	}  | 
