diff options
author | Stefan Vacek <stefan.vacek@intel.com> | 2015-08-26 14:05:54 +0200 |
---|---|---|
committer | Alexander Wenzel <Alexander.AW.Wenzel@bmw.de> | 2015-10-07 10:35:25 +0200 |
commit | 2f334a851fa1b39cab74724f3d0a0565f86c27b4 (patch) | |
tree | 932d06d33fdfcbde8dc439880ecf93af191115dc /src/tests | |
parent | 133a8bd48b42bb4714ad4472c89277db6dd4f88d (diff) | |
download | DLT-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.txt | 7 | ||||
-rw-r--r-- | src/tests/dlt-test-fork-handler.c | 47 |
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; +} |