to send stdout to dlog, move logging thread creation point 69/170869/1 accepted/tizen/unified/20180223.062116 submit/tizen/20180223.024833
authorCho Woong Suk <ws77.cho@samsung.com>
Fri, 23 Feb 2018 02:45:10 +0000 (11:45 +0900)
committerwoongsuk cho <ws77.cho@samsung.com>
Fri, 23 Feb 2018 02:47:18 +0000 (02:47 +0000)
Change-Id: I929a29ce4f92b547eaa74f5bdf95c5c83c202946
(cherry picked from commit 65ee437b4cf72d4e4720f5d9c7c2e1d0a0d28676)

NativeLauncher/launcher/dotnet/dotnet_launcher.cc
NativeLauncher/util/utils.cc

index fb0d6be..cc511ab 100644 (file)
@@ -319,6 +319,10 @@ void CoreRuntime::dispose()
 
 int CoreRuntime::launch(const char* appId, const char* root, const char* path, int argc, char* argv[])
 {
+       if (runLoggingThread() < 0) {
+               _ERR("Failed to create logging thread");
+       }
+
        if (path == nullptr) {
                _ERR("executable path is null");
                return 1;
index f5b9406..ce01795 100644 (file)
@@ -33,7 +33,6 @@
 #include "utils.h"
 #include "log.h"
 
-static int pfd[2];
 static pthread_t loggingThread;
 
 bool iCompare(const std::string& a, const std::string& b)
@@ -301,49 +300,54 @@ void scanFilesInDir(const char* directory, FileReader reader, unsigned int depth
 
 static void *stdlog(void*)
 {
+       int pfd[2];
     ssize_t readSize;
     char buf[1024];
 
-    while ((readSize = read(pfd[0], buf, sizeof buf - 1)) > 0) {
-        if (buf[readSize - 1] == '\n') {
-            --readSize;
-        }
-
-        buf[readSize] = 0;
-
-        _ERRX("%s", buf);
-    }
-
-    return 0;
-}
-
-int runLoggingThread() { // run this function to redirect your output to android log
     if (setvbuf(stdout, NULL, _IOLBF, 0) < 0) {
                _DBG("fail to make stdout line-buffered");
-               return -1;
+               return 0;
     }
 
     if (setvbuf(stderr, NULL, _IONBF, 0) < 0) {
                _DBG("make stderr unbuffered");
-               return -1;
+               return 0;
        }
 
     /* create the pipe and redirect stdout and stderr */
     if (pipe(pfd) < 0) {
                _DBG("fail to create pipe for logging");
-               return -1;
+               return 0;
     }
 
     if (dup2(pfd[1], fileno(stdout)) == -1) {
                _DBG("fail to duplicate fd to stdout");
-               return -1;
+               return 0;
     }
 
     if (dup2(pfd[1], fileno(stderr)) == -1) {
                _DBG("fail to duplicate fd to stderr");
-               return -1;
+               return 0;
        }
 
+       close(pfd[1]);
+
+    while ((readSize = read(pfd[0], buf, sizeof buf - 1)) > 0) {
+        if (buf[readSize - 1] == '\n') {
+            --readSize;
+        }
+
+        buf[readSize] = 0;
+
+        _ERRX("%s", buf);
+    }
+
+       close(pfd[0]);
+
+    return 0;
+}
+
+int runLoggingThread() {
     /* spawn the logging thread */
     if (pthread_create(&loggingThread, 0, stdlog, 0) != 0) {
                _DBG("fail to create pthread");