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:
Joachim Nilsson
2016-04-26 09:38:41 +02:00
3 changed files with 15 additions and 9 deletions
+6 -6
View File
@@ -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);
}
/**
+8
View File
@@ -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;
+1 -3
View File
@@ -97,9 +97,7 @@ svc_t *svc_new(char *cmd, int id, int type)
*/
int svc_del(svc_t *svc)
{
/* Clear any old references and set SVC_TYPE_FREE */
memset(svc, 0, sizeof(*svc));
svc->type = SVC_TYPE_FREE;
return 0;
}