Defensive programming: make sure that a process is actually running before we try to kill it.

This commit is contained in:
adamdunkels 2010-10-20 22:24:46 +00:00
parent 37a4200f40
commit 06123fefe2

View File

@ -28,7 +28,7 @@
* *
* This file is part of the Contiki operating system. * This file is part of the Contiki operating system.
* *
* @(#)$Id: process.c,v 1.11 2010/09/14 18:55:04 dak664 Exp $ * @(#)$Id: process.c,v 1.12 2010/10/20 22:24:46 adamdunkels Exp $
*/ */
/** /**
@ -129,6 +129,13 @@ exit_process(struct process *p, struct process *fromprocess)
PRINTF("process: exit_process '%s'\n", PROCESS_NAME_STRING(p)); PRINTF("process: exit_process '%s'\n", PROCESS_NAME_STRING(p));
/* Make sure the process is in the process list before we try to
exit it. */
for(q = process_list; q != p && q != NULL; q = q->next);
if(q == NULL) {
return;
}
if(process_is_running(p)) { if(process_is_running(p)) {
/* Process was running */ /* Process was running */
p->state = PROCESS_STATE_NONE; p->state = PROCESS_STATE_NONE;
@ -150,7 +157,7 @@ exit_process(struct process *p, struct process *fromprocess)
p->thread(&p->pt, PROCESS_EVENT_EXIT, NULL); p->thread(&p->pt, PROCESS_EVENT_EXIT, NULL);
} }
} }
if(p == process_list) { if(p == process_list) {
process_list = process_list->next; process_list = process_list->next;
} else { } else {