diff options
| author | Michael Brown | 2011-06-24 15:18:48 +0200 |
|---|---|---|
| committer | Michael Brown | 2011-06-28 15:45:09 +0200 |
| commit | ccc2655540f01cc4da018fc31fa16ce8cdb1f4b5 (patch) | |
| tree | d1ba1902a58b9257ab30ec1ac643a707336dbfbb /src/core | |
| parent | [process] Pass containing object pointer to process step() methods (diff) | |
| download | ipxe-ccc2655540f01cc4da018fc31fa16ce8cdb1f4b5.tar.gz ipxe-ccc2655540f01cc4da018fc31fa16ce8cdb1f4b5.tar.xz ipxe-ccc2655540f01cc4da018fc31fa16ce8cdb1f4b5.zip | |
[process] Add support for one-shot processes
Some processes execute only once, and exist solely in order to defer
execution until after the relevant instantiator method has returned.
Such processes do not need to be automatically rescheduled when
executing.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/process.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/core/process.c b/src/core/process.c index c6660f227..4a705ef62 100644 --- a/src/core/process.c +++ b/src/core/process.c @@ -100,8 +100,12 @@ void step ( void ) { ref_get ( process->refcnt ); /* Inhibit destruction mid-step */ desc = process->desc; object = process_object ( process ); - list_del ( &process->list ); - list_add_tail ( &process->list, &run_queue ); + if ( desc->reschedule ) { + list_del ( &process->list ); + list_add_tail ( &process->list, &run_queue ); + } else { + process_del ( process ); + } DBGC2 ( PROC_COL ( process ), "PROCESS " PROC_FMT " executing\n", PROC_DBG ( process ) ); desc->step ( object ); |
