Minor clean-up of thread status changes.
Eliminate the obsolete self != NULL test when acquiring the heap lock.
This should be redundant now that threads are added to the thread list
before they are able to allocate.
Switch to using a variable of the ThreadStatus type to store thread
status values rather than an ordinary int.
Change-Id: I8d30e69f20d5321a04f6b49322f13b3577d5a3c4
diff --git a/vm/Native.c b/vm/Native.c
index 0b10e23..bca45cc 100644
--- a/vm/Native.c
+++ b/vm/Native.c
@@ -407,7 +407,7 @@
while (pEntry->onLoadResult == kOnLoadPending) {
LOGD("threadid=%d: waiting for %s OnLoad status\n",
self->threadId, pEntry->pathName);
- int oldStatus = dvmChangeStatus(self, THREAD_VMWAIT);
+ ThreadStatus oldStatus = dvmChangeStatus(self, THREAD_VMWAIT);
pthread_cond_wait(&pEntry->onLoadCond, &pEntry->onLoadLock);
dvmChangeStatus(self, oldStatus);
}
@@ -499,7 +499,7 @@
* the GC to ignore us.
*/
Thread* self = dvmThreadSelf();
- int oldStatus = dvmChangeStatus(self, THREAD_VMWAIT);
+ ThreadStatus oldStatus = dvmChangeStatus(self, THREAD_VMWAIT);
handle = dlopen(pathName, RTLD_LAZY);
dvmChangeStatus(self, oldStatus);
diff --git a/vm/Thread.c b/vm/Thread.c
index 56cafb4..7dde87c 100644
--- a/vm/Thread.c
+++ b/vm/Thread.c
@@ -1465,9 +1465,8 @@
*/
dvmUnlockThreadList();
- int cc, oldStatus;
- oldStatus = dvmChangeStatus(self, THREAD_VMWAIT);
- cc = pthread_create(&threadHandle, &threadAttr, interpThreadStart,
+ ThreadStatus oldStatus = dvmChangeStatus(self, THREAD_VMWAIT);
+ int cc = pthread_create(&threadHandle, &threadAttr, interpThreadStart,
newThread);
oldStatus = dvmChangeStatus(self, oldStatus);
@@ -1843,7 +1842,7 @@
* need to initiate a GC. We switch to VMWAIT while we pause.
*/
Thread* self = dvmThreadSelf();
- int oldStatus = dvmChangeStatus(self, THREAD_VMWAIT);
+ ThreadStatus oldStatus = dvmChangeStatus(self, THREAD_VMWAIT);
dvmLockThreadList(self);
while (createStatus == 0)
pthread_cond_wait(&gDvm.threadStartCond, &gDvm.threadListLock);
diff --git a/vm/alloc/Heap.c b/vm/alloc/Heap.c
index cc3fd72..1f36601 100644
--- a/vm/alloc/Heap.c
+++ b/vm/alloc/Heap.c
@@ -166,16 +166,9 @@
ThreadStatus oldStatus;
self = dvmThreadSelf();
- if (self != NULL) {
- oldStatus = dvmChangeStatus(self, THREAD_VMWAIT);
- } else {
- LOGI("ODD: waiting on heap lock, no self\n");
- oldStatus = -1; // shut up gcc
- }
+ oldStatus = dvmChangeStatus(self, THREAD_VMWAIT);
dvmLockMutex(&gDvm.gcHeapLock);
- if (self != NULL) {
- dvmChangeStatus(self, oldStatus);
- }
+ dvmChangeStatus(self, oldStatus);
}
return true;
diff --git a/vm/interp/Interp.c b/vm/interp/Interp.c
index da8fa79..e75c91c 100644
--- a/vm/interp/Interp.c
+++ b/vm/interp/Interp.c
@@ -127,7 +127,7 @@
{
if (dvmTryLockMutex(&pSet->lock) != 0) {
Thread* self = dvmThreadSelf();
- int oldStatus = dvmChangeStatus(self, THREAD_VMWAIT);
+ ThreadStatus oldStatus = dvmChangeStatus(self, THREAD_VMWAIT);
dvmLockMutex(&pSet->lock);
dvmChangeStatus(self, oldStatus);
}