]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: add test for 'thread safety' of sd-device
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 12 Oct 2018 02:45:20 +0000 (11:45 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 12 Oct 2018 08:54:23 +0000 (17:54 +0900)
This adds a test for a5d8835c78112206bbf0812dd4cb471f803bfe88.

src/libsystemd/sd-device/test-sd-device-thread.c [new file with mode: 0644]
src/test/meson.build

diff --git a/src/libsystemd/sd-device/test-sd-device-thread.c b/src/libsystemd/sd-device/test-sd-device-thread.c
new file mode 100644 (file)
index 0000000..9f1c023
--- /dev/null
@@ -0,0 +1,39 @@
+/* SPDX-License-Identifier: LGPL-2.1+ */
+
+#include <pthread.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "sd-device.h"
+
+#include "device-util.h"
+#include "macro.h"
+
+static void* thread(void *p) {
+        sd_device **d = p;
+
+        assert_se(!(*d = sd_device_unref(*d)));
+
+        return NULL;
+}
+
+int main(int argc, char *argv[]) {
+        sd_device *loopback;
+        pthread_t t;
+        const char *key, *value;
+
+        assert_se(unsetenv("SYSTEMD_MEMPOOL") == 0);
+
+        assert_se(sd_device_new_from_syspath(&loopback, "/sys/class/net/lo") >= 0);
+
+        FOREACH_DEVICE_PROPERTY(loopback, key, value)
+                printf("%s=%s\n", key, value);
+
+        assert_se(pthread_create(&t, NULL, thread, &loopback) == 0);
+        assert_se(pthread_join(t, NULL) == 0);
+
+        assert_se(!loopback);
+
+        return 0;
+}
index daf5e7c76a4e0de374f92296bc21d4fcc6ce4915..9ce0bdec78b5315f33abca14b9f4ba0bbc8d8aaf 100644 (file)
@@ -904,6 +904,12 @@ tests += [
         [['src/libsystemd/sd-device/test-sd-device.c'],
          [],
          []],
+
+        [['src/libsystemd/sd-device/test-sd-device-thread.c'],
+         [libbasic,
+          libshared_static,
+          libsystemd],
+         [threads]],
 ]
 
 if cxx.found()