From ccc2655540f01cc4da018fc31fa16ce8cdb1f4b5 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 24 Jun 2011 14:18:48 +0100 Subject: [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 --- src/core/process.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/core') 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 ); -- cgit v1.2.3-55-g7522