Add a new, optional "is sensitive thread?" hook.
The Android framework implements this hook in Ie6f58d130a29.
Bug: 3226270
Change-Id: I7342248e5699a22b71647e7cfeec52ec871cefaf
diff --git a/vm/Globals.h b/vm/Globals.h
index c2639cb..aa3be76 100644
--- a/vm/Globals.h
+++ b/vm/Globals.h
@@ -105,6 +105,7 @@
int (*vfprintfHook)(FILE*, const char*, va_list);
void (*exitHook)(int);
void (*abortHook)(void);
+ bool (*isSensitiveThreadHook)(void);
int jniGrefLimit; // 0 means no limit
char* jniTrace;
diff --git a/vm/Jni.c b/vm/Jni.c
index f2ee2ae..0d525a0 100644
--- a/vm/Jni.c
+++ b/vm/Jni.c
@@ -4288,6 +4288,8 @@
gDvm.exitHook = args->options[i].extraInfo;
} else if (strcmp(optStr, "abort") == 0) {
gDvm.abortHook = args->options[i].extraInfo;
+ } else if (strcmp(optStr, "sensitiveThread") == 0) {
+ gDvm.isSensitiveThreadHook = args->options[i].extraInfo;
} else if (strcmp(optStr, "-Xcheck:jni") == 0) {
checkJni = true;
} else if (strncmp(optStr, "-Xjniopts:", 10) == 0) {
diff --git a/vm/Sync.c b/vm/Sync.c
index 0a0e65a..967a0d0 100644
--- a/vm/Sync.c
+++ b/vm/Sync.c
@@ -408,9 +408,12 @@
len = strlen(procName);
cp = logWriteString(cp, procName, len);
- /* Emit the main thread status, 5 bytes. */
- bool isMainThread = (self->systemTid == getpid());
- cp = logWriteInt(cp, isMainThread);
+ /* Emit the sensitive thread ("main thread") status, 5 bytes. */
+ bool isSensitive = false;
+ if (gDvm.isSensitiveThreadHook != NULL) {
+ isSensitive = gDvm.isSensitiveThreadHook();
+ }
+ cp = logWriteInt(cp, isSensitive);
/* Emit self thread name string, <= 37 bytes. */
selfName = dvmGetThreadName(self);
@@ -431,10 +434,10 @@
/* Emit the lock owner source code file name, <= 37 bytes. */
if (ownerFileName == NULL) {
- ownerFileName = "";
+ ownerFileName = "";
} else if (strcmp(fileName, ownerFileName) == 0) {
- /* Common case, so save on log space. */
- ownerFileName = "-";
+ /* Common case, so save on log space. */
+ ownerFileName = "-";
}
cp = logWriteString(cp, ownerFileName, strlen(ownerFileName));