summaryrefslogtreecommitdiffstats
path: root/src/core/process.c
diff options
context:
space:
mode:
authorMichael Brown2009-08-10 02:09:41 +0200
committerMichael Brown2009-08-10 20:27:24 +0200
commit04878ef74512df49803d1119c72c49cd8f1bfe10 (patch)
treeadd5a2af82095b9f731c90652e1f6d2b72a629f3 /src/core/process.c
parent[infiniband] Handle duplicate Communication Management REPs (diff)
downloadipxe-04878ef74512df49803d1119c72c49cd8f1bfe10.tar.gz
ipxe-04878ef74512df49803d1119c72c49cd8f1bfe10.tar.xz
ipxe-04878ef74512df49803d1119c72c49cd8f1bfe10.zip
[process] Make it safe to call process_add() multiple times
Diffstat (limited to 'src/core/process.c')
-rw-r--r--src/core/process.c13
1 files changed, 10 insertions, 3 deletions
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 );
+ }
}
/**