diff options
| author | Michael Brown | 2013-11-01 16:05:16 +0100 |
|---|---|---|
| committer | Michael Brown | 2013-11-01 17:17:28 +0100 |
| commit | 5674a3c087bf1bde65b61b6b0ca26035dd47baa3 (patch) | |
| tree | e30dd88a260b22c9bf3919432e645544d1867294 /src/core | |
| parent | [interface] Default to calling intf_restart() in response to intf_close() (diff) | |
| download | ipxe-5674a3c087bf1bde65b61b6b0ca26035dd47baa3.tar.gz ipxe-5674a3c087bf1bde65b61b6b0ca26035dd47baa3.tar.xz ipxe-5674a3c087bf1bde65b61b6b0ca26035dd47baa3.zip | |
[job] Allow job_progress() to return an ongoing job status code, if known
Some background jobs have a meaningful ongoing status code (e.g. the
current link status for a job waiting for a network link to come up).
Allow this to be exposed via the job_progress() method.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/downloader.c | 7 | ||||
| -rw-r--r-- | src/core/job.c | 16 |
2 files changed, 17 insertions, 6 deletions
diff --git a/src/core/downloader.c b/src/core/downloader.c index 4f3fc2c81..3927dfabf 100644 --- a/src/core/downloader.c +++ b/src/core/downloader.c @@ -131,9 +131,10 @@ static int downloader_ensure_size ( struct downloader *downloader, * * @v downloader Downloader * @v progress Progress report to fill in + * @ret ongoing_rc Ongoing job status code (if known) */ -static void downloader_progress ( struct downloader *downloader, - struct job_progress *progress ) { +static int downloader_progress ( struct downloader *downloader, + struct job_progress *progress ) { /* This is not entirely accurate, since downloaded data may * arrive out of order (e.g. with multicast protocols), but @@ -141,6 +142,8 @@ static void downloader_progress ( struct downloader *downloader, */ progress->completed = downloader->pos; progress->total = downloader->image->len; + + return 0; } /**************************************************************************** diff --git a/src/core/job.c b/src/core/job.c index 64d184ec3..674bec8b5 100644 --- a/src/core/job.c +++ b/src/core/job.c @@ -34,22 +34,30 @@ FILE_LICENCE ( GPL2_OR_LATER ); * * @v intf Object interface * @v progress Progress data to fill in + * @ret ongoing_rc Ongoing job status code (if known) */ -void job_progress ( struct interface *intf, struct job_progress *progress ) { +int job_progress ( struct interface *intf, struct job_progress *progress ) { struct interface *dest; job_progress_TYPE ( void * ) *op = intf_get_dest_op ( intf, job_progress, &dest ); void *object = intf_object ( dest ); + int ongoing_rc; DBGC ( INTF_COL ( intf ), "INTF " INTF_INTF_FMT " job_progress\n", INTF_INTF_DBG ( intf, dest ) ); + /* Initialise progress to zero */ + memset ( progress, 0, sizeof ( *progress ) ); + if ( op ) { - op ( object, progress ); + ongoing_rc = op ( object, progress ); } else { - /* Default is to mark progress as zero */ - memset ( progress, 0, sizeof ( *progress ) ); + /* Default is to leave progress as zero and have no + * known return status code. + */ + ongoing_rc = 0; } intf_put ( dest ); + return ongoing_rc; } |
