summaryrefslogtreecommitdiffstats
path: root/adb/mutex_list.h
diff options
context:
space:
mode:
authorJP Abgrall <jpa@google.com>2011-02-18 14:16:59 -0800
committerJP Abgrall <jpa@google.com>2011-02-18 14:16:59 -0800
commit69c5c4c45bd4f1575ae8bdba13795297be7deb8c (patch)
tree1d46a9a6e66433fbae7342206be0d040408354a6 /adb/mutex_list.h
parent53df0b6393979e7f35ab271683429aa1ea1230cd (diff)
downloadsystem_core-69c5c4c45bd4f1575ae8bdba13795297be7deb8c.zip
system_core-69c5c4c45bd4f1575ae8bdba13795297be7deb8c.tar.gz
system_core-69c5c4c45bd4f1575ae8bdba13795297be7deb8c.tar.bz2
Fix adb hang when subprocess dies early.
* Handling of the subprocess and its FD. This fixes http://b/3400254 "Many bugreports getting hung at the end in monkey" - Start up a service thread that waits on the subprocess to terminate, then closes the FD associated with it. - Have the event handler select() with a timeout so that it can detect the closed FD. Select() with no timeout does not return when an FD is closed. - Have the event handler force a read on the closed FD to trigger the close sequence. - Migrate the "shell:blabla" handling to "#if !ADB_HOST" sections. * Fix the race around OOM adjusting. - Do it in the child before exec() instead of the in the parent as the child could already have started or not (no /proc/pid/... yet). * Allow for multi-threaded D() invocations to not clobber each other. - Allow locks across object files. - Add lock within D() * Add some missing close(fd) calls - Match similar existing practices near dup2() * Add extra D() invocations related to FD handling. * Warn about using debugging as stderr/stdout is used for protocol. Change-Id: Ie5c4a5e6bfbe3f22201adf5f9a205d32e069bf9d Signed-off-by: JP Abgrall <jpa@google.com>
Diffstat (limited to 'adb/mutex_list.h')
-rw-r--r--adb/mutex_list.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/adb/mutex_list.h b/adb/mutex_list.h
index eebe0df..83f3e42 100644
--- a/adb/mutex_list.h
+++ b/adb/mutex_list.h
@@ -1,4 +1,6 @@
/* the list of mutexes used by addb */
+#ifndef __MUTEX_LIST_H
+#define __MUTEX_LIST_H
#ifndef ADB_MUTEX
#error ADB_MUTEX not defined when including this file
#endif
@@ -11,4 +13,14 @@ ADB_MUTEX(local_transports_lock)
#endif
ADB_MUTEX(usb_lock)
+// Sadly logging to /data/adb/adb-... is not thread safe.
+// After modifying adb.h::D() to count invocations:
+// DEBUG(jpa):0:Handling main()
+// DEBUG(jpa):1:[ usb_init - starting thread ]
+// (Oopsies, no :2:, and matching message is also gone.)
+// DEBUG(jpa):3:[ usb_thread - opening device ]
+// DEBUG(jpa):4:jdwp control socket started (10)
+ADB_MUTEX(D_lock)
+
#undef ADB_MUTEX
+#endif