mirror of
https://github.com/troglobit/finit.git
synced 2026-10-01 13:33:09 +07:00
Merge pull request #28 from westermo/wmo/2.4
Westermo fixes for services changing type at runtime Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
@@ -275,7 +275,9 @@ void inetd_stop(inetd_t *inetd)
|
||||
/* For dgram inetd services we block the parent SVC
|
||||
* and halt the watcher, so don't close the socket! */
|
||||
if (inetd->svc->block != SVC_BLOCK_INETD_BUSY) {
|
||||
shutdown(inetd->watcher.fd, SHUT_RDWR);
|
||||
_d("Shutting down inet socket %d ...", inetd->watcher.fd);
|
||||
if (inetd->type == SOCK_STREAM)
|
||||
shutdown(inetd->watcher.fd, SHUT_RDWR);
|
||||
close(inetd->watcher.fd);
|
||||
inetd->watcher.fd = -1;
|
||||
}
|
||||
@@ -626,12 +628,10 @@ int inetd_new(inetd_t *inetd, char *name, char *service, char *proto, int forkin
|
||||
|
||||
int inetd_del(inetd_t *inetd)
|
||||
{
|
||||
inetd_filter_t *filter, *tmp;
|
||||
inetd->svc->block = 0;
|
||||
inetd_stop(inetd);
|
||||
|
||||
TAILQ_FOREACH_SAFE(filter, &inetd->filters, link, tmp)
|
||||
free(filter);
|
||||
|
||||
return 0;
|
||||
return inetd_flush(inetd);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -648,6 +648,7 @@ int service_register(int type, char *line, time_t mtime, char *username)
|
||||
|
||||
id = svc_next_id(cmd);
|
||||
}
|
||||
recreate:
|
||||
#endif
|
||||
|
||||
svc = svc_find(cmd, id);
|
||||
@@ -658,6 +659,13 @@ int service_register(int type, char *line, time_t mtime, char *username)
|
||||
_e("Out of memory, cannot register service %s", cmd);
|
||||
return errno = ENOMEM;
|
||||
}
|
||||
} else {
|
||||
if (svc_is_inetd(svc) && type != SVC_TYPE_INETD) {
|
||||
_d("Service was previously inetd, deregistering ...");
|
||||
inetd_del(&svc->inetd);
|
||||
svc_del(svc);
|
||||
goto recreate;
|
||||
}
|
||||
}
|
||||
|
||||
svc->log = log;
|
||||
|
||||
Reference in New Issue
Block a user