diff options
-rw-r--r-- | src/run.c | 19 | ||||
-rw-r--r-- | src/thread.c | 3 |
2 files changed, 20 insertions, 2 deletions
@@ -180,6 +180,21 @@ static int process_fifo(struct lt_config_app *cfg, struct lt_thread *t) return 0; } +static void cleanup_threads(struct lt_config_app *cfg) +{ + struct lt_thread *t = cfg->threads; + + while(t) { + struct lt_thread *tn; + + close(t->fifo_fd); + tn = t->next; + free(t); + t = tn; + } + cfg->threads = NULL; +} + static int process(struct lt_config_app *cfg, struct lt_process_args *pa) { int finish = 0, getin = 1, status; @@ -239,7 +254,7 @@ if (ret < 0) \ if (-1 == ret) { if (errno != EINTR) perror("select failed"); - return -1; + break; } CONTINUE_ZERO_RET(); @@ -293,6 +308,8 @@ if (ret < 0) \ #undef MAX } + cleanup_threads(cfg); + return status; } diff --git a/src/thread.c b/src/thread.c index bef05ba..69cf768 100644 --- a/src/thread.c +++ b/src/thread.c @@ -36,7 +36,8 @@ struct lt_thread *lt_thread_add(struct lt_config_app *cfg, int fd, pid_t pid) memset(t, 0x0, sizeof(*t)); - if (-1 == lt_stats_alloc(cfg, t)) { + if (lt_sh(cfg, counts) && + (-1 == lt_stats_alloc(cfg, t))) { free(t); return NULL; } |