If task_for_pid fails, stop trying.

This commit is contained in:
Hisham 2016-03-31 00:18:42 -03:00
parent 3a4c0fa2d6
commit d64f2bdd56
1 changed files with 9 additions and 0 deletions

View File

@ -26,6 +26,7 @@ typedef struct DarwinProcess_ {
uint64_t utime; uint64_t utime;
uint64_t stime; uint64_t stime;
bool taskAccess;
} DarwinProcess; } DarwinProcess;
}*/ }*/
@ -47,6 +48,7 @@ DarwinProcess* DarwinProcess_new(Settings* settings) {
this->utime = 0; this->utime = 0;
this->stime = 0; this->stime = 0;
this->taskAccess = true;
return this; return this;
} }
@ -301,6 +303,10 @@ void DarwinProcess_scanThreads(DarwinProcess *dp) {
Process* proc = (Process*) dp; Process* proc = (Process*) dp;
kern_return_t ret; kern_return_t ret;
if (!dp->taskAccess) {
return;
}
if (proc->state == 'Z') { if (proc->state == 'Z') {
return; return;
} }
@ -308,6 +314,7 @@ void DarwinProcess_scanThreads(DarwinProcess *dp) {
task_t port; task_t port;
ret = task_for_pid(mach_task_self(), proc->pid, &port); ret = task_for_pid(mach_task_self(), proc->pid, &port);
if (ret != KERN_SUCCESS) { if (ret != KERN_SUCCESS) {
dp->taskAccess = false;
return; return;
} }
@ -315,6 +322,7 @@ void DarwinProcess_scanThreads(DarwinProcess *dp) {
mach_msg_type_number_t task_info_count = TASK_INFO_MAX; mach_msg_type_number_t task_info_count = TASK_INFO_MAX;
ret = task_info(port, TASK_BASIC_INFO, (task_info_t) tinfo, &task_info_count); ret = task_info(port, TASK_BASIC_INFO, (task_info_t) tinfo, &task_info_count);
if (ret != KERN_SUCCESS) { if (ret != KERN_SUCCESS) {
dp->taskAccess = false;
return; return;
} }
@ -322,6 +330,7 @@ void DarwinProcess_scanThreads(DarwinProcess *dp) {
mach_msg_type_number_t thread_count; mach_msg_type_number_t thread_count;
ret = task_threads(port, &thread_list, &thread_count); ret = task_threads(port, &thread_list, &thread_count);
if (ret != KERN_SUCCESS) { if (ret != KERN_SUCCESS) {
dp->taskAccess = false;
mach_port_deallocate(mach_task_self(), port); mach_port_deallocate(mach_task_self(), port);
return; return;
} }