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

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

diff --git a/src/libsystemd/sd-device/test-udev-device-thread.c b/src/libsystemd/sd-device/test-udev-device-thread.c
new file mode 100644 (file)
index 0000000..2fc0f59
--- /dev/null
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: LGPL-2.1+ */
+
+#include <pthread.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "libudev.h"
+
+#include "macro.h"
+
+static void* thread(void *p) {
+        struct udev_device **d = p;
+
+        assert_se(!(*d = udev_device_unref(*d)));
+
+        return NULL;
+}
+
+int main(int argc, char *argv[]) {
+        struct udev_device *loopback;
+        pthread_t t;
+
+        assert_se(unsetenv("SYSTEMD_MEMPOOL") == 0);
+
+        assert_se(loopback = udev_device_new_from_syspath(NULL, "/sys/class/net/lo"));
+
+        assert_se(udev_device_get_properties_list_entry(loopback));
+
+        assert_se(pthread_create(&t, NULL, thread, &loopback) == 0);
+        assert_se(pthread_join(t, NULL) == 0);
+
+        assert_se(!loopback);
+
+        return 0;
+}
index 9ce0bdec78b5315f33abca14b9f4ba0bbc8d8aaf..34dedb4f968d1251245b55fe42d3e14865404083 100644 (file)
@@ -910,6 +910,12 @@ tests += [
           libshared_static,
           libsystemd],
          [threads]],
+
+        [['src/libsystemd/sd-device/test-udev-device-thread.c'],
+         [libbasic,
+          libshared_static,
+          libudev],
+         [threads]],
 ]
 
 if cxx.found()