diff --git a/lib/nodes/file.c b/lib/nodes/file.c index 682e6669e..0a0f80303 100644 --- a/lib/nodes/file.c +++ b/lib/nodes/file.c @@ -370,10 +370,11 @@ retry: ret = io_scan(&f->io, smps, cnt); goto retry; case FILE_EOF_STOP: - info("Reached end-of-file. Stopping node %s", node_name(n)); + info("Reached end-of-file."); - killme(SIGTERM); - pause(); + n->state = STATE_STOPPING; + + return -1; } } else diff --git a/lib/nodes/shmem.c b/lib/nodes/shmem.c index 2588db0c9..260a46ab0 100644 --- a/lib/nodes/shmem.c +++ b/lib/nodes/shmem.c @@ -136,8 +136,11 @@ int shmem_read(struct node *n, struct sample *smps[], unsigned cnt, unsigned *re if (recv < 0) { /* This can only really mean that the other process has exited, so close * the interface to make sure the shared memory object is unlinked */ - shmem_int_close(&shm->intf); - warning("Shared memory segment has been closed for node: %s", node_name(n)); + + info("Shared memory segment has been closed."); + + n->state = STATE_STOPPING; + return recv; } diff --git a/lib/nodes/signal_generator.c b/lib/nodes/signal_generator.c index 4fdff2263..3c0d7ee77 100644 --- a/lib/nodes/signal_generator.c +++ b/lib/nodes/signal_generator.c @@ -264,9 +264,11 @@ int signal_generator_read(struct node *n, struct sample *smps[], unsigned cnt, u } if (s->limit > 0 && s->counter >= s->limit) { - info("Reached limit of node %s", node_name(n)); - killme(SIGTERM); - return 0; + info("Reached limit."); + + n->state = STATE_STOPPING; + + return -1; } s->counter += steps; diff --git a/lib/nodes/test_rtt.c b/lib/nodes/test_rtt.c index 6cb89f99e..7fceb5c0d 100644 --- a/lib/nodes/test_rtt.c +++ b/lib/nodes/test_rtt.c @@ -307,9 +307,11 @@ int test_rtt_read(struct node *n, struct sample *smps[], unsigned cnt, unsigned } if (t->current >= vlist_length(&t->cases)) { - info("This was the last case. Terminating."); - killme(SIGTERM); - pause(); + info("This was the last case. Stopping node %s", node_name(n)); + + n->state = STATE_STOPPING; + + return -1; } else { struct test_rtt_case *c = (struct test_rtt_case *) vlist_at(&t->cases, t->current);