Process only one poll request at a time to avoid starvation if one process keeps calling process_poll() from its poll handler
This commit is contained in:
parent
1b024d6e69
commit
f93a48599e
1 changed files with 9 additions and 11 deletions
|
@ -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.7 2008/01/23 21:06:25 adamdunkels Exp $
|
* @(#)$Id: process.c,v 1.8 2008/01/24 21:00:51 adamdunkels Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -234,17 +234,15 @@ do_poll(void)
|
||||||
{
|
{
|
||||||
struct process *p;
|
struct process *p;
|
||||||
|
|
||||||
do {
|
poll_requested = 0;
|
||||||
poll_requested = 0;
|
/* Call the processes that needs to be polled. */
|
||||||
/* Call the processes that needs to be polled. */
|
for(p = process_list; p != NULL; p = p->next) {
|
||||||
for(p = process_list; p != NULL; p = p->next) {
|
if(p->needspoll) {
|
||||||
if(p->needspoll) {
|
p->state = PROCESS_STATE_RUNNING;
|
||||||
p->state = PROCESS_STATE_RUNNING;
|
p->needspoll = 0;
|
||||||
p->needspoll = 0;
|
call_process(p, PROCESS_EVENT_POLL, NULL);
|
||||||
call_process(p, PROCESS_EVENT_POLL, NULL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} while(poll_requested);
|
}
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue