diff options
| author | Roy Marples <roy@marples.name> | 2008-03-28 08:42:05 +0000 | 
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2008-03-28 08:42:05 +0000 | 
| commit | 11e33e81c855395cbd931e99f7452ed6b3fef357 (patch) | |
| tree | 2af516723abe43f67f38b5419867288913e85169 /src/librc | |
| parent | 5e8ed2aecabf48895e6d3d090591ffb59fc7588b (diff) | |
| download | openrc-11e33e81c855395cbd931e99f7452ed6b3fef357.tar.xz | |
Remove rc_service_start/stop from librc as they block and unmask signals. The application may not wish this behaviour and should fork/exec the service itself.
Diffstat (limited to 'src/librc')
| -rw-r--r-- | src/librc/librc.c | 89 | ||||
| -rw-r--r-- | src/librc/librc.h | 2 | ||||
| -rw-r--r-- | src/librc/rc.h | 10 | ||||
| -rw-r--r-- | src/librc/rc.map | 2 | 
4 files changed, 0 insertions, 103 deletions
| diff --git a/src/librc/librc.c b/src/librc/librc.c index 5d4826c9..13220d2f 100644 --- a/src/librc/librc.c +++ b/src/librc/librc.c @@ -673,95 +673,6 @@ bool rc_service_value_set(const char *service, const char *option,  }  librc_hidden_def(rc_service_value_set) -static pid_t _exec_service(const char *service, const char *arg) -{ -	char *file; -	char fifo[PATH_MAX]; -	pid_t pid = -1; -	sigset_t full; -	sigset_t old; -	struct sigaction sa; - -	file = rc_service_resolve(service); -	if (! exists(file)) { -		rc_service_mark(service, RC_SERVICE_STOPPED); -		free(file); -		return 0; -	} - -	/* We create a fifo so that other services can wait until we complete */ -	snprintf(fifo, sizeof(fifo), RC_SVCDIR "/exclusive/%s", -		 basename_c(service)); -	if (mkfifo(fifo, 0600) != 0 && errno != EEXIST) { -		free(file); -		return -1; -	} - -	/* We need to block signals until we have forked */ -	memset(&sa, 0, sizeof (sa)); -	sa.sa_handler = SIG_DFL; -	sigemptyset(&sa.sa_mask); -	sigfillset(&full); -	sigprocmask(SIG_SETMASK, &full, &old); - -	if ((pid = fork()) == 0) { -		/* Restore default handlers */ -		sigaction(SIGCHLD, &sa, NULL); -		sigaction(SIGHUP, &sa, NULL); -		sigaction(SIGINT, &sa, NULL); -		sigaction(SIGQUIT, &sa, NULL); -		sigaction(SIGTERM, &sa, NULL); -		sigaction(SIGUSR1, &sa, NULL); -		sigaction(SIGWINCH, &sa, NULL); - -		/* Unmask signals */ -		sigprocmask(SIG_SETMASK, &old, NULL); - -		/* Safe to run now */ -		execl(file, file, arg, (char *) NULL); -		fprintf(stderr, "unable to exec `%s': %s\n", -			file, strerror(errno)); -		unlink(fifo); -		_exit(EXIT_FAILURE); -	} - -	if (pid == -1) -		fprintf(stderr, "fork: %s\n",strerror (errno)); - -	sigprocmask(SIG_SETMASK, &old, NULL); - -	free(file); - -	return pid; -} - -pid_t rc_service_stop(const char *service) -{ -	RC_SERVICE state = rc_service_state(service); - -	if (state & RC_SERVICE_FAILED) -		return -1; - -	if (state & RC_SERVICE_STOPPED) -		return 0; - -	return _exec_service(service, "stop"); -} -librc_hidden_def(rc_service_stop) - -pid_t rc_service_start(const char *service) -{ -	RC_SERVICE state = rc_service_state(service); - -	if (state & RC_SERVICE_FAILED) -		return -1; - -	if (! state & RC_SERVICE_STOPPED) -		return 0; - -	return _exec_service(service, "start"); -} -librc_hidden_def(rc_service_start)  bool rc_service_schedule_start(const char *service,  			       const char *service_to_start) diff --git a/src/librc/librc.h b/src/librc/librc.h index b5e9cabd..353b5923 100644 --- a/src/librc/librc.h +++ b/src/librc/librc.h @@ -104,8 +104,6 @@ librc_hidden_proto(rc_service_mark)  librc_hidden_proto(rc_service_resolve)  librc_hidden_proto(rc_service_schedule_clear)  librc_hidden_proto(rc_service_schedule_start) -librc_hidden_proto(rc_service_start) -librc_hidden_proto(rc_service_stop)  librc_hidden_proto(rc_services_in_runlevel)  librc_hidden_proto(rc_services_in_state)  librc_hidden_proto(rc_services_scheduled) diff --git a/src/librc/rc.h b/src/librc/rc.h index 415963b4..04cdba4d 100644 --- a/src/librc/rc.h +++ b/src/librc/rc.h @@ -172,16 +172,6 @@ bool rc_service_schedule_clear(const char *);   * @return state of the service */  RC_SERVICE rc_service_state(const char *); -/*! Start a service - * @param service to start - * @return pid of the service starting process */ -pid_t rc_service_start(const char *); - -/*! Stop a service - * @param service to stop - * @return pid of service stopping process */ -pid_t rc_service_stop(const char *); -  /*! Check if the service started the daemon   * @param service to check   * @param exec to check diff --git a/src/librc/rc.map b/src/librc/rc.map index 845ae946..8a803f3d 100644 --- a/src/librc/rc.map +++ b/src/librc/rc.map @@ -32,8 +32,6 @@ global:  	rc_service_resolve;  	rc_service_schedule_clear;  	rc_service_schedule_start; -	rc_service_start; -	rc_service_stop;  	rc_services_in_runlevel;  	rc_services_in_state;  	rc_services_scheduled; | 
