From b0b61a0a9aa8545d38f5ddc422dfebfcceeb9576 Mon Sep 17 00:00:00 2001 From: greatim Date: Fri, 19 Apr 2013 22:53:52 +0900 Subject: [PATCH] [Title] fix bug for launch problem [Desc.] [Issue] Change-Id: I6999efccbe56c3857a79a2057a53b47b3d398004 --- daemon/daemon.c | 2 ++ daemon/daemon.h | 1 + daemon/main.c | 1 + daemon/threads.c | 16 ++++++++++++++++ packaging/dynamic-analysis-manager.spec | 2 +- 5 files changed, 21 insertions(+), 1 deletion(-) diff --git a/daemon/daemon.c b/daemon/daemon.c index db7bf57..42ea315 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -86,6 +86,7 @@ static void setEmptyTargetSlot(int index) manager.target[index].recv_thread = -1; manager.target[index].allocmem = 0; manager.target[index].starttime = 0; + manager.target[index].initial_log = 0; if(manager.target[index].event_fd != -1) close(manager.target[index].event_fd); manager.target[index].event_fd = -1; @@ -560,6 +561,7 @@ static int targetEventHandler(int epollfd, int index, uint64_t msg) log.length = sprintf(log.data, "%d`,%Lu", manager.target[index].pid, manager.target[index].starttime); } + manager.target[index].initial_log = 1; sendDataToHost(&log); } diff --git a/daemon/daemon.h b/daemon/daemon.h index 4c70209..d3d6cb7 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -162,6 +162,7 @@ typedef struct int socket; // written only by main thread pthread_t recv_thread; // written only by main thread int event_fd; // for thread communication (from recv thread to main thread) + int initial_log; // written only by main thread } __da_target_info; typedef struct diff --git a/daemon/main.c b/daemon/main.c index f3b78f8..3c14cd2 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -260,6 +260,7 @@ static int initializeManager() manager.target[i].socket = -1; manager.target[i].event_fd = -1; manager.target[i].recv_thread = -1; + manager.target[i].initial_log = 0; manager.target[i].allocmem = 0; manager.target[i].starttime = 0; } diff --git a/daemon/threads.c b/daemon/threads.c index 1c50934..d16432b 100644 --- a/daemon/threads.c +++ b/daemon/threads.c @@ -46,6 +46,7 @@ static void* recvThread(void* data) { int index = (int)data; + int pass = 0; uint64_t event; ssize_t recvLen; msg_t log; @@ -126,6 +127,12 @@ static void* recvThread(void* data) write(manager.target[index].event_fd, &event, sizeof(uint64_t)); break; } + else if(log.type == MSG_MSG) + { + // don't send to host + LOGI("EXTRA MSG %d|%d|%s\n", log.type, log.length, log.data); + continue; + } #ifdef PRINT_TARGET_LOG else if(log.type == MSG_LOG) { @@ -153,6 +160,15 @@ static void* recvThread(void* data) #endif // any message before MSG_PID message arrived did not be sent to host + if(unlikely(pass == 0)) + { + while(manager.target[index].initial_log == 0) + { + sleep(0); + } + } + pass = 1; + if(manager.target[index].pid != -1) sendDataToHost(&log); } diff --git a/packaging/dynamic-analysis-manager.spec b/packaging/dynamic-analysis-manager.spec index ebdd41a..9ba2e96 100644 --- a/packaging/dynamic-analysis-manager.spec +++ b/packaging/dynamic-analysis-manager.spec @@ -1,6 +1,6 @@ Name: dynamic-analysis-manager Summary: dynamic analyzer manager -Version: 2.1.1 +Version: 2.1.2 Release: 1 Group: System/Libraries License: Apache License, Version 2 -- 2.7.4