summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
6a746e1)
Otherwise we hit max number of fd limit (1024) and instances fail to
start with the following errors in syslog
Sun Jun 14 01:27:38 2015 daemon.warn procd: pipe() failed: 24 (Too many open files)
Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
+static void instance_free_stdio(struct service_instance *in);
+
void
instance_start(struct service_instance *in)
{
void
instance_start(struct service_instance *in)
{
if (in->proc.pending)
return;
if (in->proc.pending)
return;
+ instance_free_stdio(in);
if (in->_stdout.fd.fd > -2) {
if (pipe(opipe)) {
ULOG_WARN("pipe() failed: %d (%s)\n", errno, strerror(errno));
if (in->_stdout.fd.fd > -2) {
if (pipe(opipe)) {
ULOG_WARN("pipe() failed: %d (%s)\n", errno, strerror(errno));
-void
-instance_free(struct service_instance *in)
+static void
+instance_free_stdio(struct service_instance *in)
{
if (in->_stdout.fd.fd > -1) {
ustream_free(&in->_stdout.stream);
close(in->_stdout.fd.fd);
{
if (in->_stdout.fd.fd > -1) {
ustream_free(&in->_stdout.stream);
close(in->_stdout.fd.fd);
+ in->_stdout.fd.fd = -1;
}
if (in->_stderr.fd.fd > -1) {
ustream_free(&in->_stderr.stream);
close(in->_stderr.fd.fd);
}
if (in->_stderr.fd.fd > -1) {
ustream_free(&in->_stderr.stream);
close(in->_stderr.fd.fd);
+ in->_stderr.fd.fd = -1;
+void
+instance_free(struct service_instance *in)
+{
+ instance_free_stdio(in);
uloop_process_delete(&in->proc);
uloop_timeout_cancel(&in->timeout);
trigger_del(in);
uloop_process_delete(&in->proc);
uloop_timeout_cancel(&in->timeout);
trigger_del(in);