diff --git a/core/sys/process.c b/core/sys/process.c index da04bde9a..70adf673c 100644 --- a/core/sys/process.c +++ b/core/sys/process.c @@ -28,7 +28,7 @@ * * 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)); + /* 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)) { /* Process was running */ 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); } } - + if(p == process_list) { process_list = process_list->next; } else {