]> git.ozlabs.org Git - ccan/blobdiff - ccan/tal/test/run-take-free-assert.c
tal: handle take() pointers more carefully.
[ccan] / ccan / tal / test / run-take-free-assert.c
diff --git a/ccan/tal/test/run-take-free-assert.c b/ccan/tal/test/run-take-free-assert.c
new file mode 100644 (file)
index 0000000..062a778
--- /dev/null
@@ -0,0 +1,44 @@
+#include <ccan/tal/tal.h>
+#include <ccan/tal/tal.c>
+#include <ccan/tap/tap.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+int main(void)
+{
+       int status;
+       char *p;
+
+       plan_tests(4);
+
+       /* Test direct free. */
+       switch (fork()) {
+       case 0:
+               tal_free(take(tal(NULL, char)));
+               exit(2);
+       case -1:
+               exit(1);
+       default:
+               wait(&status);
+               ok1(WIFSIGNALED(status));
+               ok1(WTERMSIG(status) == SIGABRT);
+       }
+
+       /* Test indirect free. */
+       switch (fork()) {
+       case 0:
+               p = tal(NULL, char);
+               take(tal(p, char));
+               tal_free(p);
+               exit(2);
+       case -1:
+               exit(1);
+       default:
+               wait(&status);
+               ok1(WIFSIGNALED(status));
+               ok1(WTERMSIG(status) == SIGABRT);
+       }
+       return exit_status();
+}