+// SPDX-FileCopyrightText: 2013 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+//
+// SPDX-License-Identifier: MIT
+
/*
- * Copyright (C) 2013 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- *
- * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
- * OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
- *
- * Permission is hereby granted to use or copy this program for any
- * purpose, provided the above notices are retained on all copies.
- * Permission to modify the code and to distribute modified code is
- * granted, provided the above notices are retained, and a notice that
- * the code was modified is included with the above copyright notice.
- *
* This example shows how to pop all nodes from a wfstack.
*/
struct cds_wfs_node node; /* Chaining in stack */
};
-int main(int argc, char **argv)
+int main(void)
{
int values[] = { -5, 42, 36, 24, };
struct cds_wfs_stack mystack; /* Stack */
unsigned int i;
int ret = 0;
- struct cds_wfs_node *snode;
+ struct cds_wfs_node *snode, *sn;
struct cds_wfs_head *shead;
cds_wfs_init(&mystack);
/*
* Show the stack content, iterate in reverse order of push,
- * from newest to oldest.
+ * from newest to oldest. Use cds_wfs_for_each_blocking_safe()
+ * so we can free the nodes as we iterate.
*/
printf("mystack content:");
- cds_wfs_for_each_blocking(shead, snode) {
+ cds_wfs_for_each_blocking_safe(shead, snode, sn) {
struct mynode *node =
caa_container_of(snode, struct mynode, node);
printf(" %d", node->value);
+ free(node);
}
printf("\n");
end:
+ cds_wfs_destroy(&mystack);
return ret;
}