From b1755462ab344ff758c3a1e6ae0d10a729d96d1b Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 15 May 2007 16:53:46 +0000 Subject: Do not hold self-references. This then avoids the problem of having to ensure that we only drop our self-reference exactly once. To maintain the guarantee that an object won't go out of scope unexpectedly while one of its event handlers is being called, the event-calling functions now automatically obtain and drop extra references. --- src/include/gpxe/job.h | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'src/include/gpxe/job.h') diff --git a/src/include/gpxe/job.h b/src/include/gpxe/job.h index 2b33408fa..28885869c 100644 --- a/src/include/gpxe/job.h +++ b/src/include/gpxe/job.h @@ -104,14 +104,24 @@ intf_to_job ( struct interface *intf ) { } /** - * Get destination job control interface + * Get reference to destination job control interface * * @v job Job control interface * @ret dest Destination interface */ static inline __attribute__ (( always_inline )) struct job_interface * -job_dest ( struct job_interface *job ) { - return intf_to_job ( job->intf.dest ); +job_get_dest ( struct job_interface *job ) { + return intf_to_job ( intf_get ( job->intf.dest ) ); +} + +/** + * Drop reference to job control interface + * + * @v job Job control interface + */ +static inline __attribute__ (( always_inline )) void +job_put ( struct job_interface *job ) { + intf_put ( &job->intf ); } /** -- cgit v1.2.3-55-g7522