mirror of
https://github.com/xcat2/xNBA.git
synced 2024-12-25 12:41:34 +00:00
[process] Hold reference to process during call to step()
It is conceivable that the process may terminate during the execution of step(). If nothing else holds a reference to the containing object, this would cause the object to be freed prior to returning from step(). Add a ref_get()/ref_put() around the call to ->step() to prevent this from happening. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
parent
1798e04ebb
commit
068ef5f72d
@ -82,9 +82,11 @@ void step ( void ) {
|
||||
list_for_each_entry ( process, &run_queue, list ) {
|
||||
list_del ( &process->list );
|
||||
list_add_tail ( &process->list, &run_queue );
|
||||
ref_get ( process->refcnt ); /* Inhibit destruction mid-step */
|
||||
DBGC2 ( process, "PROCESS %p executing\n", process );
|
||||
process->step ( process );
|
||||
DBGC2 ( process, "PROCESS %p finished executing\n", process );
|
||||
ref_put ( process->refcnt ); /* Allow destruction */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user