diff --git a/common b/common
index 7f356d91d..9533016a4 160000
--- a/common
+++ b/common
@@ -1 +1 @@
-Subproject commit 7f356d91d5fe81e91ec552583fb5b307ccaa723d
+Subproject commit 9533016a49e2880af995d69758eead89488b0b69
diff --git a/include/villas/hook_list.hpp b/include/villas/hook_list.hpp
index 563e6366a..abd61747d 100644
--- a/include/villas/hook_list.hpp
+++ b/include/villas/hook_list.hpp
@@ -39,9 +39,9 @@ struct sample;
 struct vpath;
 struct vnode;
 
-int hook_list_init(struct vlist *hs);
+int hook_list_init(struct vlist *hs) __attribute__ ((warn_unused_result));
 
-int hook_list_destroy(struct vlist *hs);
+int hook_list_destroy(struct vlist *hs) __attribute__ ((warn_unused_result));
 
 /** Parses an object of hooks
  *
diff --git a/include/villas/io.h b/include/villas/io.h
index 23f6b701e..57e0d5611 100644
--- a/include/villas/io.h
+++ b/include/villas/io.h
@@ -76,11 +76,11 @@ struct io {
 	const struct format_type *_vt;
 };
 
-int io_init(struct io *io, const struct format_type *fmt, struct vlist *signals, int flags);
+int io_init(struct io *io, const struct format_type *fmt, struct vlist *signals, int flags) __attribute__ ((warn_unused_result));
 
-int io_init2(struct io *io, const struct format_type *fmt, const char *dt, int flags);
+int io_init2(struct io *io, const struct format_type *fmt, const char *dt, int flags) __attribute__ ((warn_unused_result));
 
-int io_destroy(struct io *io);
+int io_destroy(struct io *io) __attribute__ ((warn_unused_result));
 
 int io_check(struct io *io);
 
diff --git a/include/villas/kernel/if.h b/include/villas/kernel/if.h
index 607d238be..f2bfd4610 100644
--- a/include/villas/kernel/if.h
+++ b/include/villas/kernel/if.h
@@ -62,7 +62,7 @@ struct interface {
  * @retval >0 Success. A pointer to the new interface.
  * @retval 0 Error. The creation failed.
  */
-int if_init(struct interface * , struct rtnl_link *link);
+int if_init(struct interface * , struct rtnl_link *link) __attribute__ ((warn_unused_result));
 
 /** Get name of interface */
 const char * if_name(struct interface *);
@@ -71,7 +71,7 @@ const char * if_name(struct interface *);
  *
  * @param i A pointer to the interface structure.
  */
-int if_destroy(struct interface *i);
+int if_destroy(struct interface *i) __attribute__ ((warn_unused_result));
 
 /** Start interface.
  *
diff --git a/include/villas/memory.h b/include/villas/memory.h
index f881789c3..58f72571e 100644
--- a/include/villas/memory.h
+++ b/include/villas/memory.h
@@ -64,7 +64,7 @@ struct memory_allocation {
 };
 
 /** Initilialize memory subsystem */
-int memory_init(int hugepages);
+int memory_init(int hugepages) __attribute__ ((warn_unused_result));
 
 int memory_lock(size_t lock);
 
diff --git a/include/villas/memory_type.h b/include/villas/memory_type.h
index 9c2ec9fcc..a0c96487f 100644
--- a/include/villas/memory_type.h
+++ b/include/villas/memory_type.h
@@ -60,4 +60,4 @@ extern struct memory_type *memory_default;
 struct memory_type * memory_ib(struct vnode *n, struct memory_type *parent);
 struct memory_type * memory_managed(void *ptr, size_t len);
 
-int memory_mmap_init(int hugepages);
+int memory_mmap_init(int hugepages) __attribute__ ((warn_unused_result));
diff --git a/include/villas/node.h b/include/villas/node.h
index 49c307cd0..d14becc49 100644
--- a/include/villas/node.h
+++ b/include/villas/node.h
@@ -101,7 +101,7 @@ struct vnode {
 };
 
 /** Initialize node with default values */
-int node_init(struct vnode *n, struct vnode_type *vt);
+int node_init(struct vnode *n, struct vnode_type *vt) __attribute__ ((warn_unused_result));
 
 /** Do initialization after parsing the configuration */
 int node_prepare(struct vnode *n);
@@ -166,7 +166,7 @@ int node_restart(struct vnode *n);
  *
  * @see node_type::destroy
  */
-int node_destroy(struct vnode *n);
+int node_destroy(struct vnode *n) __attribute__ ((warn_unused_result));
 
 /** Return a pointer to a string which should be used to print this node.
  *
diff --git a/include/villas/node_direction.h b/include/villas/node_direction.h
index 9e2faa8e4..fe051ecd5 100644
--- a/include/villas/node_direction.h
+++ b/include/villas/node_direction.h
@@ -55,7 +55,9 @@ struct vnode_direction {
 	json_t *cfg;		/**< A JSON object containing the configuration of the node. */
 };
 
-int node_direction_init(struct vnode_direction *nd, enum NodeDir dir, struct vnode *n);
+int node_direction_init(struct vnode_direction *nd, enum NodeDir dir, struct vnode *n) __attribute__ ((warn_unused_result));
+
+int node_direction_destroy(struct vnode_direction *nd, struct vnode *n) __attribute__ ((warn_unused_result));
 
 int node_direction_parse(struct vnode_direction *nd, struct vnode *n, json_t *cfg);
 
@@ -67,8 +69,6 @@ int node_direction_start(struct vnode_direction *nd, struct vnode *n);
 
 int node_direction_stop(struct vnode_direction *nd, struct vnode *n);
 
-int node_direction_destroy(struct vnode_direction *nd, struct vnode *n);
-
 struct vlist * node_direction_get_signals(struct vnode_direction *nd);
 
 /** @} */
diff --git a/include/villas/path.h b/include/villas/path.h
index 84c29940c..253c145a1 100644
--- a/include/villas/path.h
+++ b/include/villas/path.h
@@ -98,7 +98,7 @@ struct vpath {
 };
 
 /** Initialize internal data structures. */
-int path_init(struct vpath *p);
+int path_init(struct vpath *p) __attribute__ ((warn_unused_result));
 
 int path_prepare(struct vpath *p);
 
@@ -127,7 +127,7 @@ int path_stop(struct vpath *p);
  *
  * @param i A pointer to the path structure.
  */
-int path_destroy(struct vpath *p);
+int path_destroy(struct vpath *p) __attribute__ ((warn_unused_result));
 
 /** Fills the provided buffer with a string representation of the path.
  *
diff --git a/include/villas/pool.h b/include/villas/pool.h
index b53aa6b80..09c426571 100644
--- a/include/villas/pool.h
+++ b/include/villas/pool.h
@@ -57,10 +57,10 @@ struct pool {
  * @retval 0 The pool has been successfully initialized.
  * @retval <>0 There was an error during the pool initialization.
  */
-int pool_init(struct pool *p, size_t cnt, size_t blocksz, struct memory_type *mem = memory_default);
+int pool_init(struct pool *p, size_t cnt, size_t blocksz, struct memory_type *mem = memory_default) __attribute__ ((warn_unused_result));
 
 /** Destroy and release memory used by pool. */
-int pool_destroy(struct pool *p);
+int pool_destroy(struct pool *p) __attribute__ ((warn_unused_result));
 
 /** Pop up to \p cnt values from the stack an place them in the array \p blocks.
  *
diff --git a/include/villas/queue.h b/include/villas/queue.h
index 9a5cdbad4..e70a46145 100644
--- a/include/villas/queue.h
+++ b/include/villas/queue.h
@@ -71,10 +71,10 @@ struct queue {
 };
 
 /** Initialize MPMC queue */
-int queue_init(struct queue *q, size_t size, struct memory_type *mem = memory_default);
+int queue_init(struct queue *q, size_t size, struct memory_type *mem = memory_default) __attribute__ ((warn_unused_result));
 
 /** Desroy MPMC queue and release memory */
-int queue_destroy(struct queue *q);
+int queue_destroy(struct queue *q) __attribute__ ((warn_unused_result));
 
 /** Return estimation of current queue usage.
  *
diff --git a/include/villas/queue_signalled.h b/include/villas/queue_signalled.h
index 86dc3b4d5..810cf0a42 100644
--- a/include/villas/queue_signalled.h
+++ b/include/villas/queue_signalled.h
@@ -64,19 +64,19 @@ struct queue_signalled {
 
 #define queue_signalled_available(q) queue_available(&((q)->queue))
 
-int queue_signalled_init(struct queue_signalled *qs, size_t size, struct memory_type *mem = memory_default, enum QueueSignalledMode mode = QueueSignalledMode::AUTO, int flags = 0);
+int queue_signalled_init(struct queue_signalled *qs, size_t size, struct memory_type *mem = memory_default, enum QueueSignalledMode mode = QueueSignalledMode::AUTO, int flags = 0) __attribute__ ((warn_unused_result));
 
-int queue_signalled_destroy(struct queue_signalled *qs);
+int queue_signalled_destroy(struct queue_signalled *qs) __attribute__ ((warn_unused_result));
 
-int queue_signalled_push(struct queue_signalled *qs, void *ptr);
+int queue_signalled_push(struct queue_signalled *qs, void *ptr) __attribute__ ((warn_unused_result));
 
-int queue_signalled_pull(struct queue_signalled *qs, void **ptr);
+int queue_signalled_pull(struct queue_signalled *qs, void **ptr) __attribute__ ((warn_unused_result));
 
-int queue_signalled_push_many(struct queue_signalled *qs, void *ptr[], size_t cnt);
+int queue_signalled_push_many(struct queue_signalled *qs, void *ptr[], size_t cnt) __attribute__ ((warn_unused_result));
 
-int queue_signalled_pull_many(struct queue_signalled *qs, void *ptr[], size_t cnt);
+int queue_signalled_pull_many(struct queue_signalled *qs, void *ptr[], size_t cnt) __attribute__ ((warn_unused_result));
 
-int queue_signalled_close(struct queue_signalled *qs);
+int queue_signalled_close(struct queue_signalled *qs) __attribute__ ((warn_unused_result));
 
 /** Returns a file descriptor which can be used with poll / select to wait for new data */
 int queue_signalled_fd(struct queue_signalled *qs);
diff --git a/include/villas/signal.h b/include/villas/signal.h
index 1701a9b96..6f8861676 100644
--- a/include/villas/signal.h
+++ b/include/villas/signal.h
@@ -55,16 +55,16 @@ struct signal {
 };
 
 /** Initialize a signal with default values. */
-int signal_init(struct signal *s);
+int signal_init(struct signal *s) __attribute__ ((warn_unused_result));
 
 /** Destroy a signal and release memory. */
-int signal_destroy(struct signal *s);
+int signal_destroy(struct signal *s) __attribute__ ((warn_unused_result));
 
 /** Allocate memory for a new signal, and initialize it with provided values. */
-struct signal * signal_create(const char *name, const char *unit, enum SignalType fmt);
+struct signal * signal_create(const char *name, const char *unit, enum SignalType fmt) __attribute__ ((warn_unused_result));
 
 /** Destroy and release memory of signal. */
-int signal_free(struct signal *s);
+int signal_free(struct signal *s) __attribute__ ((warn_unused_result));
 
 /** Increase reference counter. */
 int signal_incref(struct signal *s);
diff --git a/include/villas/signal_list.h b/include/villas/signal_list.h
index b670fc978..61fbdf91b 100644
--- a/include/villas/signal_list.h
+++ b/include/villas/signal_list.h
@@ -30,9 +30,9 @@
 /* Forward declarations */
 struct vlist;
 
-int signal_list_init(struct vlist *list);
+int signal_list_init(struct vlist *list) __attribute__ ((warn_unused_result));
 
-int signal_list_destroy(struct vlist *list);
+int signal_list_destroy(struct vlist *list) __attribute__ ((warn_unused_result));
 
 int signal_list_parse(struct vlist *list, json_t *cfg);
 
diff --git a/lib/formats/iotagent_ul.cpp b/lib/formats/iotagent_ul.cpp
index 548e8b1e8..75eb8e7f7 100644
--- a/lib/formats/iotagent_ul.cpp
+++ b/lib/formats/iotagent_ul.cpp
@@ -66,7 +66,7 @@ __attribute__((constructor(110))) static void UNIQUE(__ctor)() {
 	p.format.sprint	= iotagent_ul_sprint;
 	p.format.size = 0;
 
-	vlist_push(&plugins, &p);
+	vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110))) static void UNIQUE(__dtor)() {
diff --git a/lib/formats/json.cpp b/lib/formats/json.cpp
index 3141f4a5d..af3a7c9cb 100644
--- a/lib/formats/json.cpp
+++ b/lib/formats/json.cpp
@@ -352,7 +352,7 @@ __attribute__((constructor(110))) static void UNIQUE(__ctor)() {
 	p.format.flags = (int) SampleFlags::HAS_TS_ORIGIN | (int) SampleFlags::HAS_SEQUENCE | (int) SampleFlags::HAS_DATA;
 	p.format.delimiter = '\n';
 
-	vlist_push(&plugins, &p);
+	vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110))) static void UNIQUE(__dtor)() {
diff --git a/lib/formats/json_reserve.cpp b/lib/formats/json_reserve.cpp
index 9c17e9522..84c8108a6 100644
--- a/lib/formats/json_reserve.cpp
+++ b/lib/formats/json_reserve.cpp
@@ -333,7 +333,7 @@ __attribute__((constructor(110))) static void UNIQUE(__ctor)() {
 	p.format.sscan	= json_reserve_sscan;
 	p.format.size = 0;
 
-	vlist_push(&plugins, &p);
+	vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110))) static void UNIQUE(__dtor)() {
diff --git a/lib/formats/protobuf.cpp b/lib/formats/protobuf.cpp
index ef7c4d12c..5bafb8c07 100644
--- a/lib/formats/protobuf.cpp
+++ b/lib/formats/protobuf.cpp
@@ -255,7 +255,7 @@ __attribute__((constructor(110))) static void UNIQUE(__ctor)() {
 	p.format.flags = (int) IOFlags::HAS_BINARY_PAYLOAD |
 		          (int) SampleFlags::HAS_TS_ORIGIN | (int) SampleFlags::HAS_SEQUENCE | (int) SampleFlags::HAS_DATA;
 
-	vlist_push(&plugins, &p);
+	vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110))) static void UNIQUE(__dtor)() {
diff --git a/lib/formats/value.cpp b/lib/formats/value.cpp
index c9cb553fa..c6ed3b596 100644
--- a/lib/formats/value.cpp
+++ b/lib/formats/value.cpp
@@ -94,9 +94,6 @@ out:	smp->flags = 0;
 
 static struct plugin p;
 __attribute__((constructor(110))) static void UNIQUE(__ctor)() {
-	if (plugins.state == State::DESTROYED)
-		vlist_init(&plugins);
-
 	p.name = "value";
 	p.description = "A bare text value without any headers";
 	p.type = PluginType::FORMAT;
@@ -105,7 +102,7 @@ __attribute__((constructor(110))) static void UNIQUE(__ctor)() {
 	p.format.size 	= 0;
 	p.format.flags	= (int) SampleFlags::HAS_DATA | (int) IOFlags::NEWLINES;
 
-	vlist_push(&plugins, &p);
+	vlist_init_and_push(&plugins, &p);;
 }
 
 __attribute__((destructor(110))) static void UNIQUE(__dtor)() {
diff --git a/lib/formats/villas_human.cpp b/lib/formats/villas_human.cpp
index 90c3b01d3..10903e19c 100644
--- a/lib/formats/villas_human.cpp
+++ b/lib/formats/villas_human.cpp
@@ -237,7 +237,7 @@ __attribute__((constructor(110))) static void UNIQUE(__ctor)() {
 	p.format.delimiter = '\n';
 	p.format.separator = '\t';
 
-	vlist_push(&plugins, &p);
+	vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110))) static void UNIQUE(__dtor)() {
diff --git a/lib/hook.cpp b/lib/hook.cpp
index 0c33e42bd..8645bbad0 100644
--- a/lib/hook.cpp
+++ b/lib/hook.cpp
@@ -60,7 +60,9 @@ Hook::Hook(struct vpath *p, struct vnode *n, int fl, int prio, bool en) :
 
 Hook::~Hook()
 {
-	signal_list_destroy(&signals);
+	int ret __attribute__((unused));
+	
+	ret = signal_list_destroy(&signals);
 }
 
 void Hook::prepare()
diff --git a/lib/hooks/average.cpp b/lib/hooks/average.cpp
index d8e8e9a31..7bdd9e6a6 100644
--- a/lib/hooks/average.cpp
+++ b/lib/hooks/average.cpp
@@ -59,7 +59,9 @@ public:
 
 	virtual ~AverageHook()
 	{
-		vlist_destroy(&signal_names, nullptr, true);
+		int ret __attribute__((unused));
+
+		ret = vlist_destroy(&signal_names, nullptr, true);
 	}
 
 	virtual void prepare()
diff --git a/lib/hooks/limit_value.cpp b/lib/hooks/limit_value.cpp
index d9fa8297d..c2370c3b1 100644
--- a/lib/hooks/limit_value.cpp
+++ b/lib/hooks/limit_value.cpp
@@ -61,7 +61,9 @@ public:
 
 	virtual ~LimitValueHook()
 	{
-		vlist_destroy(&signal_names, nullptr, true);
+		int ret __attribute__((unused));
+
+		ret = vlist_destroy(&signal_names, nullptr, true);
 	}
 
 	virtual void prepare()
diff --git a/lib/kernel/if.cpp b/lib/kernel/if.cpp
index b09244020..20b5d0aa8 100644
--- a/lib/kernel/if.cpp
+++ b/lib/kernel/if.cpp
@@ -44,6 +44,8 @@ using namespace villas::utils;
 
 int if_init(struct interface *i, struct rtnl_link *link)
 {
+	int ret;
+
 	i->nl_link = link;
 
 	debug(LOG_IF | 3, "Created interface '%s'", if_name(i));
@@ -54,15 +56,21 @@ int if_init(struct interface *i, struct rtnl_link *link)
 	else
 		warning("Did not found any interrupts for interface '%s'", if_name(i));
 
-	vlist_init(&i->nodes);
+	ret = vlist_init(&i->nodes);
+	if (ret)
+		return ret;
 
 	return 0;
 }
 
 int if_destroy(struct interface *i)
 {
+	int ret;
+
 	/* List members are freed by the nodes they belong to. */
-	vlist_destroy(&i->nodes, nullptr, false);
+	ret = vlist_destroy(&i->nodes);
+	if (ret)
+		return ret;
 
 	rtnl_qdisc_put(i->tc_qdisc);
 
diff --git a/lib/nodes/amqp.cpp b/lib/nodes/amqp.cpp
index cff9cba68..a655664bd 100644
--- a/lib/nodes/amqp.cpp
+++ b/lib/nodes/amqp.cpp
@@ -413,8 +413,9 @@ static void register_plugin() {
 	p.node.write		= amqp_write;
 	p.node.poll_fds		= amqp_poll_fds;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/can.cpp b/lib/nodes/can.cpp
index 212c9aeb4..38e5837d8 100644
--- a/lib/nodes/can.cpp
+++ b/lib/nodes/can.cpp
@@ -558,9 +558,6 @@ int can_poll_fds(struct vnode *n, int fds[])
 
 __attribute__((constructor(110)))
 static void register_plugin() {
-	if (plugins.state == State::DESTROYED)
-		vlist_init(&plugins);
-
 	p.name			= "can";
 	p.description		= "Receive CAN messages using the socketCAN driver";
 	p.node.instances.state	= State::DESTROYED;
@@ -578,8 +575,9 @@ static void register_plugin() {
 	p.node.write		= can_write;
 	p.node.poll_fds		= can_poll_fds;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/comedi.cpp b/lib/nodes/comedi.cpp
index d1f2c7147..5bf91a596 100644
--- a/lib/nodes/comedi.cpp
+++ b/lib/nodes/comedi.cpp
@@ -1013,8 +1013,9 @@ static void register_plugin() {
 	p.node.write		= comedi_write;
 	p.node.poll_fds		= comedi_poll_fds;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/ethercat.cpp b/lib/nodes/ethercat.cpp
index 8a4ca6b1d..10e560d8e 100644
--- a/lib/nodes/ethercat.cpp
+++ b/lib/nodes/ethercat.cpp
@@ -61,6 +61,7 @@ struct coupler {
 
 static void ethercat_cyclic_task(struct vnode *n)
 {
+	int ret;
 	struct sample *smp;
 	struct ethercat *w = (struct ethercat *) n->_vd;
 
@@ -89,7 +90,9 @@ static void ethercat_cyclic_task(struct vnode *n)
 			smp->data[i].f = w->in.range * (float) ain_value / INT16_MAX;
 		}
 
-		queue_signalled_push(&w->queue, smp);
+		ret = queue_signalled_push(&w->queue, smp);
+		if (ret)
+			warning("Ethercat: Failed to enqueue samples");
 
 		/* Write process data */
 		smp = w->send.exchange(nullptr);
@@ -464,8 +467,9 @@ static void register_plugin() {
 	p.node.write		= ethercat_write;
 	p.node.poll_fds		= ethercat_poll_fds;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/example.cpp b/lib/nodes/example.cpp
index a34e2e9e1..108c61b88 100644
--- a/lib/nodes/example.cpp
+++ b/lib/nodes/example.cpp
@@ -254,8 +254,9 @@ static void register_plugin() {
 	p.node.poll_fds		= example_poll_fds;
 	p.node.netem_fds	= example_netem_fds;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/exec.cpp b/lib/nodes/exec.cpp
index 71028d34b..a2e902f26 100644
--- a/lib/nodes/exec.cpp
+++ b/lib/nodes/exec.cpp
@@ -285,8 +285,9 @@ static void register_plugin() {
 	p.node.write		= exec_write;
 	p.node.poll_fds		= exec_poll_fds;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/file.cpp b/lib/nodes/file.cpp
index 7275c81e6..bb75e0c95 100644
--- a/lib/nodes/file.cpp
+++ b/lib/nodes/file.cpp
@@ -513,8 +513,9 @@ static void register_plugin() {
 	p.node.write		= file_write;
 	p.node.poll_fds		= file_poll_fds;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/fpga.cpp b/lib/nodes/fpga.cpp
index 204981af6..11d9c57b7 100644
--- a/lib/nodes/fpga.cpp
+++ b/lib/nodes/fpga.cpp
@@ -327,9 +327,6 @@ int fpga_poll_fds(struct vnode *n, int fds[])
 
 __attribute__((constructor(110)))
 static void register_plugin() {
-	if (plugins.state == State::DESTROYED)
-		vlist_init(&plugins);
-
 	p.name			= "fpga";
 	p.description		= "Communicate with VILLASfpga Xilinx FPGA boards";
 	p.type			= PluginType::NODE;
@@ -350,8 +347,9 @@ static void register_plugin() {
 	p.node.write		= fpga_write;
 	p.node.poll_fds		= fpga_poll_fds;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/iec61850.cpp b/lib/nodes/iec61850.cpp
index 661c92593..1cc552389 100644
--- a/lib/nodes/iec61850.cpp
+++ b/lib/nodes/iec61850.cpp
@@ -220,7 +220,9 @@ int iec61850_type_stop()
 
 	EthernetHandleSet_destroy(hset);
 
-	vlist_destroy(&receivers, (dtor_cb_t) iec61850_receiver_destroy, true);
+	ret = vlist_destroy(&receivers, (dtor_cb_t) iec61850_receiver_destroy, true);
+	if (ret)
+		return ret;
 
 	return 0;
 }
diff --git a/lib/nodes/iec61850_sv.cpp b/lib/nodes/iec61850_sv.cpp
index ce0b22692..33abb5412 100644
--- a/lib/nodes/iec61850_sv.cpp
+++ b/lib/nodes/iec61850_sv.cpp
@@ -134,7 +134,8 @@ static void iec61850_sv_listener(SVSubscriber subscriber, void *ctx, SVSubscribe
 		smp->length++;
 	}
 
-	queue_signalled_push(&i->in.queue, smp);
+	int pushed __attribute__((unused));
+	pushed = queue_signalled_push(&i->in.queue, smp);
 }
 
 int iec61850_sv_parse(struct vnode *n, json_t *json)
@@ -496,8 +497,9 @@ static void register_plugin() {
 	p.node.write		= iec61850_sv_write;
 	p.node.poll_fds		= iec61850_sv_poll_fds;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/infiniband.cpp b/lib/nodes/infiniband.cpp
index 559f86d86..a97d18c03 100644
--- a/lib/nodes/infiniband.cpp
+++ b/lib/nodes/infiniband.cpp
@@ -1028,8 +1028,9 @@ static void register_plugin() {
 	p.node.reverse		= ib_reverse;
 	p.node.memory_type	= memory_ib;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/influxdb.cpp b/lib/nodes/influxdb.cpp
index 43dc0a3ae..09a76c627 100644
--- a/lib/nodes/influxdb.cpp
+++ b/lib/nodes/influxdb.cpp
@@ -228,9 +228,9 @@ static void register_plugin() {
 	p.node.stop		= influxdb_close;
 	p.node.write		= influxdb_write;
 
-
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/mqtt.cpp b/lib/nodes/mqtt.cpp
index 1895a7061..125d6fc2d 100644
--- a/lib/nodes/mqtt.cpp
+++ b/lib/nodes/mqtt.cpp
@@ -148,7 +148,9 @@ static void mqtt_message_cb(struct mosquitto *mosq, void *userdata, const struct
 		return;
 	}
 
-	queue_signalled_push_many(&m->queue, (void **) smps, n->in.vectorize);
+	ret = queue_signalled_push_many(&m->queue, (void **) smps, n->in.vectorize);
+	if (ret < (int) n->in.vectorize)
+		warning("MQTT: Failed to enqueue samples");
 }
 
 static void mqtt_subscribe_cb(struct mosquitto *mosq, void *userdata, int mid, int qos_count, const int *granted_qos)
@@ -416,9 +418,8 @@ int mqtt_type_start(villas::node::SuperNode *sn)
 	int ret;
 
 	ret = vlist_init(&clients);
-	if (ret) {
-	    return ret;
-	}
+	if (ret)
+		return ret;
 
 	ret = mosquitto_lib_init();
 	if (ret)
@@ -426,9 +427,8 @@ int mqtt_type_start(villas::node::SuperNode *sn)
 
 	// Start thread here to run mosquitto loop for registered clients
 	ret = pthread_create(&thread, nullptr, mosquitto_loop_thread, nullptr);
-	if (ret) {
-	    return ret;
-	}
+	if (ret)
+		return ret;
 
 	return 0;
 
@@ -445,23 +445,24 @@ int mqtt_type_stop()
 	// Stop thread here that executes mosquitto loop
 	ret = pthread_cancel(thread);
 	if (ret)
-	    return ret;
+		return ret;
 	debug(  3, "Called pthread_cancel() on MQTT communication management thread.");
 
 	ret = pthread_join(thread, nullptr);
-	if (ret) {
-	    return ret;
-	}
+	if (ret)
+		return ret;
 
 	ret = mosquitto_lib_cleanup();
 	if (ret)
 		goto mosquitto_error;
 
 	// When this is called the list of clients should be empty
-	if (vlist_length(&clients) > 0) {
-	    error("List of MQTT clients contains elements at time of destruction. Call node_stop for each MQTT node before stopping node type!");
-	}
-	vlist_destroy(&clients, nullptr, false);
+	if (vlist_length(&clients) > 0) 
+		error("List of MQTT clients contains elements at time of destruction. Call node_stop for each MQTT node before stopping node type!");
+	
+	ret = vlist_destroy(&clients, nullptr, false);
+	if (ret)
+		return ret;
 
 	return 0;
 
@@ -543,8 +544,9 @@ static void register_plugin() {
 	p.node.reverse		= mqtt_reverse;
 	p.node.poll_fds		= mqtt_poll_fds;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/nanomsg.cpp b/lib/nodes/nanomsg.cpp
index 56cb97856..4c6984060 100644
--- a/lib/nodes/nanomsg.cpp
+++ b/lib/nodes/nanomsg.cpp
@@ -91,8 +91,13 @@ int nanomsg_parse(struct vnode *n, json_t *cfg)
 	json_t *json_out_endpoints = nullptr;
 	json_t *json_in_endpoints = nullptr;
 
-	vlist_init(&m->out.endpoints);
-	vlist_init(&m->in.endpoints);
+	ret = vlist_init(&m->out.endpoints);
+	if (ret)
+		return ret;
+
+	ret = vlist_init(&m->in.endpoints);
+	if (ret)
+		return ret;
 
 	ret = json_unpack_ex(cfg, &err, 0, "{ s?: s, s?: { s?: o }, s?: { s?: o } }",
 		"format", &format,
@@ -313,8 +318,9 @@ static void register_plugin() {
 	p.node.poll_fds		= nanomsg_poll_fds;
 	p.node.netem_fds	= nanomsg_netem_fds;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/ngsi.cpp b/lib/nodes/ngsi.cpp
index f72f69e7b..e5eed207f 100644
--- a/lib/nodes/ngsi.cpp
+++ b/lib/nodes/ngsi.cpp
@@ -868,8 +868,9 @@ static void register_plugin() {
 	p.node.poll_fds		= ngsi_poll_fds;
 	p.node.reverse		= ngsi_reverse;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/opal.cpp b/lib/nodes/opal.cpp
index 12f9f261e..d333da439 100644
--- a/lib/nodes/opal.cpp
+++ b/lib/nodes/opal.cpp
@@ -328,8 +328,9 @@ static void register_plugin() {
 	p.node.read		= opal_read;
 	p.node.write		= opal_write;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/rtp.cpp b/lib/nodes/rtp.cpp
index 6040f2073..6c2c5d177 100644
--- a/lib/nodes/rtp.cpp
+++ b/lib/nodes/rtp.cpp
@@ -638,8 +638,9 @@ static void register_plugin() {
 	p.node.poll_fds	= rtp_poll_fds;
 	p.node.netem_fds	= rtp_netem_fds;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/shmem.cpp b/lib/nodes/shmem.cpp
index f39064cfe..948722958 100644
--- a/lib/nodes/shmem.cpp
+++ b/lib/nodes/shmem.cpp
@@ -218,9 +218,9 @@ static void register_plugin() {
 	p.node.read		= shmem_read;
 	p.node.write		= shmem_write;
 
-
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/signal_generator.cpp b/lib/nodes/signal_generator.cpp
index 4111fccb8..19ec675d2 100644
--- a/lib/nodes/signal_generator.cpp
+++ b/lib/nodes/signal_generator.cpp
@@ -222,6 +222,8 @@ int signal_generator_parse(struct vnode *n, json_t *cfg)
 
 			json_array_foreach(json_type, i, json_value) {
 				type_str = json_string_value(json_value);
+				if (!type_str)
+					throw ConfigError(json_value, "node-config-node-signal", "Signal type must be a string");
 
 				s->type[i] = signal_generator_lookup_type(type_str);
 			}
@@ -461,8 +463,9 @@ static void register_plugin() {
 	p.node.read		= signal_generator_read;
 	p.node.poll_fds		= signal_generator_poll_fds;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/socket.cpp b/lib/nodes/socket.cpp
index 4f837b358..47657acbc 100644
--- a/lib/nodes/socket.cpp
+++ b/lib/nodes/socket.cpp
@@ -589,8 +589,9 @@ static void register_plugin() {
 	p.node.poll_fds		= socket_fds;
 	p.node.netem_fds	= socket_fds;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/stats.cpp b/lib/nodes/stats.cpp
index 11494a1fa..0ad2ea0f8 100644
--- a/lib/nodes/stats.cpp
+++ b/lib/nodes/stats.cpp
@@ -264,8 +264,9 @@ static void register_plugin() {
 	p.node.read		= stats_node_read;
 	p.node.poll_fds		= stats_node_poll_fds;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/test_rtt.cpp b/lib/nodes/test_rtt.cpp
index 5957c535c..5edb7d057 100644
--- a/lib/nodes/test_rtt.cpp
+++ b/lib/nodes/test_rtt.cpp
@@ -140,7 +140,9 @@ int test_rtt_parse(struct vnode *n, json_t *cfg)
 	t->cooldown = 0;
 
 	/* Generate list of test cases */
-	vlist_init(&t->cases);
+	ret = vlist_init(&t->cases);
+	if (ret)
+		return ret;
 
 	ret = json_unpack_ex(cfg, &err, 0, "{ s?: s, s?: s, s?: s, s?: F, s: o }",
 		"prefix", &prefix,
@@ -458,8 +460,9 @@ static void register_plugin() {
 	p.node.read		= test_rtt_read;
 	p.node.write		= test_rtt_write;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/uldaq.cpp b/lib/nodes/uldaq.cpp
index 8d1c705ed..b45516627 100644
--- a/lib/nodes/uldaq.cpp
+++ b/lib/nodes/uldaq.cpp
@@ -661,8 +661,9 @@ static void register_plugin() {
 	p.node.stop		= uldaq_stop;
 	p.node.read		= uldaq_read;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/nodes/websocket.cpp b/lib/nodes/websocket.cpp
index 513afcf97..a4733178c 100644
--- a/lib/nodes/websocket.cpp
+++ b/lib/nodes/websocket.cpp
@@ -369,7 +369,11 @@ int websocket_protocol_cb(struct lws *wsi, enum lws_callback_reasons reason, voi
 
 int websocket_type_start(villas::node::SuperNode *sn)
 {
-	vlist_init(&connections);
+	int ret;
+
+	ret = vlist_init(&connections);
+	if (ret)
+		return ret;
 
 	web = sn->getWeb();
 	if (web->getState() != State::STARTED)
@@ -532,7 +536,9 @@ int websocket_parse(struct vnode *n, json_t *cfg)
 	json_t *json_dest;
 	json_error_t err;
 
-	vlist_init(&w->destinations);
+	ret = vlist_init(&w->destinations);
+	if (ret)
+		return ret;
 
 	ret = json_unpack_ex(cfg, &err, 0, "{ s?: o }", "destinations", &json_dests);
 	if (ret)
@@ -626,8 +632,9 @@ __attribute__((constructor(110))) static void UNIQUE(__ctor)() {
 	p.node.write		= websocket_write;
 	p.node.poll_fds		= websocket_poll_fds;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110))) static void UNIQUE(__dtor)() {
diff --git a/lib/nodes/zeromq.cpp b/lib/nodes/zeromq.cpp
index ca9e21413..9bfd7fa3a 100644
--- a/lib/nodes/zeromq.cpp
+++ b/lib/nodes/zeromq.cpp
@@ -96,6 +96,7 @@ int zeromq_reverse(struct vnode *n)
 
 int zeromq_init(struct vnode *n)
 {
+	int ret;
 	struct zeromq *z = (struct zeromq *) n->_vd;
 
 	z->out.bind = 1;
@@ -107,8 +108,13 @@ int zeromq_init(struct vnode *n)
 	z->in.pending = 0;
 	z->out.pending = 0;
 
-	vlist_init(&z->in.endpoints);
-	vlist_init(&z->out.endpoints);
+	ret = vlist_init(&z->in.endpoints);
+	if (ret)
+		return ret;
+
+	ret = vlist_init(&z->out.endpoints);
+	if (ret)
+		return ret;
 
 	return 0;
 }
@@ -660,8 +666,9 @@ static void register_plugin() {
 	p.node.poll_fds		= zeromq_poll_fds;
 	p.node.netem_fds	= zeromq_netem_fds;
 
-	vlist_init(&p.node.instances);
-	vlist_push(&plugins, &p);
+	int ret = vlist_init(&p.node.instances);
+	if (!ret)
+		vlist_init_and_push(&plugins, &p);
 }
 
 __attribute__((destructor(110)))
diff --git a/lib/pool.cpp b/lib/pool.cpp
index cdc7f39ba..8b1250bd5 100644
--- a/lib/pool.cpp
+++ b/lib/pool.cpp
@@ -64,7 +64,9 @@ int pool_destroy(struct pool *p)
 	if (p->state == State::DESTROYED)
 		return 0;
 
-	queue_destroy(&p->queue);
+	ret = queue_destroy(&p->queue);
+	if (ret)
+		return ret;
 
 	void *buffer = (char *) p + p->buffer_off;
 	ret = memory_free(buffer);
diff --git a/lib/shmem.cpp b/lib/shmem.cpp
index 7ed78d1ae..ecf4a3613 100644
--- a/lib/shmem.cpp
+++ b/lib/shmem.cpp
@@ -164,13 +164,19 @@ retry:	fd = shm_open(wname, O_RDWR|O_CREAT|O_EXCL, 0600);
 
 int shmem_int_close(struct shmem_int *shm)
 {
+	int ret;
+
 	atomic_store(&shm->closed, 1);
 
-	queue_signalled_close(&shm->write.shared->queue);
+	ret = queue_signalled_close(&shm->write.shared->queue);
+	if (ret)
+		return ret;
 
 	shm_unlink(shm->write.name);
+
 	if (atomic_load(&shm->readers) == 0)
 		munmap(shm->read.base, shm->read.len);
+
 	if (atomic_load(&shm->writers) == 0)
 		munmap(shm->write.base, shm->write.len);
 
diff --git a/lib/signal.cpp b/lib/signal.cpp
index b00ab1e03..e8012e063 100644
--- a/lib/signal.cpp
+++ b/lib/signal.cpp
@@ -149,21 +149,27 @@ int signal_decref(struct signal *s)
 	int prev = atomic_fetch_sub(&s->refcnt, 1);
 
 	/* Did we had the last reference? */
-	if (prev == 1)
-		signal_free(s);
+	if (prev == 1) {
+		int ret = signal_free(s);
+		if (ret)
+			throw RuntimeError("Failed to release sample");
+	}
 
 	return prev - 1;
 }
 
 struct signal * signal_copy(struct signal *s)
 {
+	int ret;
 	struct signal *ns;
 
 	ns = new struct signal;
 	if (!ns)
 		throw MemoryAllocationError();
 
-	signal_init(ns);
+	ret = signal_init(ns);
+	if (!ret)
+		throw RuntimeError("Failed to initialize signal");
 
 	ns->type = s->type;
 	ns->init = s->init;
diff --git a/lib/super_node.cpp b/lib/super_node.cpp
index 913cd1f45..210ecbce2 100644
--- a/lib/super_node.cpp
+++ b/lib/super_node.cpp
@@ -64,9 +64,19 @@ SuperNode::SuperNode() :
 	hugepages(DEFAULT_NR_HUGEPAGES),
 	task(CLOCK_REALTIME)
 {
-	vlist_init(&nodes);
-	vlist_init(&paths);
-	vlist_init(&interfaces);
+	int ret;
+
+	ret = vlist_init(&nodes);
+	if (ret)
+		throw RuntimeError("Failed to initialize list");
+
+	ret = vlist_init(&paths);
+	if (ret)
+		throw RuntimeError("Failed to initialize list");
+
+	ret = vlist_init(&interfaces);
+	if (ret)
+		throw RuntimeError("Failed to initialize list");
 
 #ifdef WITH_NETEM
 	nl_init(); /* Fill link cache */
@@ -236,9 +246,7 @@ void SuperNode::check()
 	for (size_t i = 0; i < vlist_length(&paths); i++) {
 		auto *p = (struct vpath *) vlist_at(&paths, i);
 
-		ret = path_check(p);
-		if (ret)
-			throw RuntimeError("Invalid configuration for path {}", path_name(p));
+		path_check(p);
 	}
 
 	state = State::CHECKED;
@@ -336,7 +344,7 @@ void SuperNode::preparePaths()
 		if (!path_is_enabled(p))
 			continue;
 
-		ret = path_prepare(p);
+		ret = path_prepare(p, &nodes);
 		if (ret)
 			throw RuntimeError("Failed to prepare path: {}", path_name(p));
 	}
@@ -473,12 +481,14 @@ void SuperNode::run()
 
 SuperNode::~SuperNode()
 {
+	int ret __attribute__((unused));
+
 	assert(state != State::STARTED);
 
-	vlist_destroy(&paths,      (dtor_cb_t) path_destroy, true);
-	vlist_destroy(&nodes,      (dtor_cb_t) node_destroy, true);
+	ret = vlist_destroy(&paths,      (dtor_cb_t) path_destroy, true);
+	ret = vlist_destroy(&nodes,      (dtor_cb_t) node_destroy, true);
 #ifdef WITH_NETEM
-	vlist_destroy(&interfaces, (dtor_cb_t) if_destroy, true);
+	ret = vlist_destroy(&interfaces, (dtor_cb_t) if_destroy, true);
 #endif /* WITH_NETEM */
 }
 
diff --git a/src/villas-pipe.cpp b/src/villas-pipe.cpp
index d08489002..b78ce8365 100644
--- a/src/villas-pipe.cpp
+++ b/src/villas-pipe.cpp
@@ -85,7 +85,9 @@ public:
 
 	~PipeDirection()
 	{
-		pool_destroy(&pool);
+		int ret __attribute__((unused));
+		
+		ret = pool_destroy(&pool);
 	}
 
 	virtual void run()
@@ -164,7 +166,9 @@ public:
 				goto leave;
 		}
 
-leave2:		return;
+leave2:	
+		logger->info("Send thread stopped");
+		return;
 
 leave:		if (io_eof(io)) {
 			if (limit < 0) {
@@ -225,8 +229,11 @@ public:
 
 		return;
 
-leave:		logger->info("Reached receive limit. Terminating...");
-leave2:		raise(SIGINT);
+leave:
+		logger->info("Reached receive limit. Terminating...");
+leave2:
+		logger->info("Receive thread stopped");
+		raise(SIGINT);
 	}
 };
 
diff --git a/tests/unit/io.cpp b/tests/unit/io.cpp
index 58b38379f..0949584e2 100644
--- a/tests/unit/io.cpp
+++ b/tests/unit/io.cpp
@@ -239,7 +239,8 @@ ParameterizedTest(Param *p, io, lowlevel, .init = init_memory)
 	ret = pool_init(&pool, 2 * p->cnt, SAMPLE_LENGTH(NUM_VALUES));
 	cr_assert_eq(ret, 0);
 
-	vlist_init(&signals);
+	ret = vlist_init(&signals);
+	cr_assert_eq(ret, 0);
 	signal_list_generate(&signals, NUM_VALUES, SignalType::FLOAT);
 
 	ret = sample_alloc_many(&pool, smps, p->cnt);
@@ -334,7 +335,8 @@ ParameterizedTest(Param *p, io, highlevel, .init = init_memory)
 	ret = sample_alloc_many(&pool, smpt, p->cnt);
 	cr_assert_eq(ret, p->cnt);
 
-	vlist_init(&signals);
+	ret = vlist_init(&signals);
+	cr_assert_eq(ret, 0);
 	signal_list_generate(&signals, NUM_VALUES, SignalType::FLOAT);
 
 	fill_sample_data(&signals, smps, p->cnt);
diff --git a/tests/unit/main.cpp b/tests/unit/main.cpp
index 40a5f021d..008195229 100644
--- a/tests/unit/main.cpp
+++ b/tests/unit/main.cpp
@@ -24,5 +24,6 @@
 
 void init_memory()
 {
-	memory_init(DEFAULT_NR_HUGEPAGES);
+	int ret __attribute__((unused));
+	ret = memory_init(DEFAULT_NR_HUGEPAGES);
 }