Merge "adb: setsid() for adb host server."
diff --git a/adb/adb.cpp b/adb/adb.cpp
index 58ccd0a..cb54d04 100644
--- a/adb/adb.cpp
+++ b/adb/adb.cpp
@@ -883,8 +883,6 @@
             fprintf(stderr, "ADB server didn't ACK\n" );
             return -1;
         }
-
-        setsid();
     }
 #endif /* !defined(_WIN32) */
     return 0;
diff --git a/adb/client/main.cpp b/adb/client/main.cpp
index 6397c52..27b7109 100644
--- a/adb/client/main.cpp
+++ b/adb/client/main.cpp
@@ -127,10 +127,12 @@
         setup_daemon_logging();
 
 #if !defined(_WIN32)
-        // Set the process group so that ctrl-c in the spawning process doesn't kill us.
-        // Do this here instead of after the fork so that a ctrl-c between the "starting server" and
-        // "done starting server" messages gets a chance to terminate the server.
-        setpgrp();
+        // Start a new session for the daemon. Do this here instead of after the fork so
+        // that a ctrl-c between the "starting server" and "done starting server" messages
+        // gets a chance to terminate the server.
+        if (setsid() == -1) {
+            fatal("setsid() failed: %s", strerror(errno));
+        }
 #endif
 
         // Any error output written to stderr now goes to adb.log. We could