X-Git-Url: http://git.etherboot.org/people/peper/gpxe.git/blobdiff_plain/46073f12391e5a467fbf5d5853ea91333fcce843..04878ef74512df49803d1119c72c49cd8f1bfe10:/src/core/process.c diff --git a/src/core/process.c b/src/core/process.c index 6dacd665..9c13e020 100644 --- a/src/core/process.c +++ b/src/core/process.c @@ -37,11 +37,18 @@ static LIST_HEAD ( run_queue ); * Add process to process list * * @v process Process + * + * It is safe to call process_add() multiple times; further calls will + * have no effect. */ void process_add ( struct process *process ) { - DBGC ( process, "PROCESS %p starting\n", process ); - ref_get ( process->refcnt ); - list_add_tail ( &process->list, &run_queue ); + if ( list_empty ( &process->list ) ) { + DBGC ( process, "PROCESS %p starting\n", process ); + ref_get ( process->refcnt ); + list_add_tail ( &process->list, &run_queue ); + } else { + DBGC ( process, "PROCESS %p already started\n", process ); + } } /**