summaryrefslogtreecommitdiff
path: root/src/tests
diff options
context:
space:
mode:
authorStefan Vacek <stefan.vacek@intel.com>2015-08-26 14:05:54 +0200
committerAlexander Wenzel <Alexander.AW.Wenzel@bmw.de>2015-10-07 10:35:25 +0200
commit2f334a851fa1b39cab74724f3d0a0565f86c27b4 (patch)
tree932d06d33fdfcbde8dc439880ecf93af191115dc /src/tests
parent133a8bd48b42bb4714ad4472c89277db6dd4f88d (diff)
downloadDLT-daemon-2f334a851fa1b39cab74724f3d0a0565f86c27b4.tar.gz
Allow applications to fork()
- if fork() is called from an application, dlt is reset and user application needs to re-register application and contexts in child-process Signed-off-by: Stefan Vacek <stefan.vacek@intel.com>
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/CMakeLists.txt7
-rw-r--r--src/tests/dlt-test-fork-handler.c47
2 files changed, 53 insertions, 1 deletions
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
index 557e403..d4ac21c 100644
--- a/src/tests/CMakeLists.txt
+++ b/src/tests/CMakeLists.txt
@@ -55,7 +55,12 @@ add_executable(dlt-test-filetransfer ${dlt_test_filetransfer_SRCS})
target_link_libraries(dlt-test-filetransfer dlt)
set_target_properties(dlt-test-filetransfer PROPERTIES LINKER_LANGUAGE C)
-install(TARGETS dlt-test-multi-process dlt-test-multi-process-client dlt-test-user dlt-test-client dlt-test-stress-user dlt-test-stress-client dlt-test-stress dlt-test-filetransfer
+set(dlt_test_fork_handler_SRCS dlt-test-fork-handler.c)
+add_executable(dlt-test-fork-handler ${dlt_test_fork_handler_SRCS})
+target_link_libraries(dlt-test-fork-handler dlt)
+set_target_properties(dlt-test-fork-handler PROPERTIES LINKER_LANGUAGE C)
+
+install(TARGETS dlt-test-multi-process dlt-test-multi-process-client dlt-test-user dlt-test-client dlt-test-stress-user dlt-test-stress-client dlt-test-stress dlt-test-filetransfer dlt-test-fork-handler
RUNTIME DESTINATION bin
COMPONENT base)
diff --git a/src/tests/dlt-test-fork-handler.c b/src/tests/dlt-test-fork-handler.c
new file mode 100644
index 0000000..d9c65e5
--- /dev/null
+++ b/src/tests/dlt-test-fork-handler.c
@@ -0,0 +1,47 @@
+/**
+ * Copyright (C) 2015 Intel Corporation
+ *
+ */
+
+#include <unistd.h> /* for fork() */
+
+#include "dlt.h"
+
+/**
+ * @brief sample code for using at_fork-handler
+ */
+int main()
+{
+ DltContext mainContext;
+
+ DLT_REGISTER_APP("PRNT", "Parent application");
+ DLT_REGISTER_CONTEXT(mainContext, "CTXP", "Parent context");
+ DLT_LOG(mainContext, DLT_LOG_WARN, DLT_STRING("First message before fork"));
+ usleep(200000);
+
+ pid_t pid = fork();
+ if (pid == 0) /* child process */
+ {
+ /* this message should not be visible */
+ /* DLT_LOG(mainContext, DLT_LOG_WARN, DLT_STRING("Child's first message after fork, pid: "), DLT_INT32(getpid())); */
+ /* unfortunately, this message does arrive, I assume because it still has (locally) valid data ... */
+
+ DLT_REGISTER_APP("CHLD", "Child application");
+ DLT_REGISTER_CONTEXT(mainContext, "CTXC", "Child context");
+ DLT_LOG(mainContext, DLT_LOG_WARN, DLT_STRING("Child's second message after fork, pid: "), DLT_INT32(getpid()));
+ usleep(400000);
+ }
+ else if (pid == -1) /* error in fork */
+ {
+ return -1;
+ }
+ else /* parent */
+ {
+ DLT_LOG(mainContext, DLT_LOG_WARN, DLT_STRING("Parent's first message after fork, pid: "), DLT_INT32(getpid()));
+ usleep(500000);
+ }
+
+ DLT_UNREGISTER_APP();
+
+ return 0;
+}