summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown2013-11-01 16:13:33 +0100
committerMichael Brown2013-11-01 17:26:08 +0100
commitdc7a023715e8c317e8013737ccd8960ff781a15c (patch)
tree19cdd6542fc6f89d9bffc600e239dc699fccacc6
parent[monojob] Add timeout parameter to monojob_wait() (diff)
downloadipxe-dc7a023715e8c317e8013737ccd8960ff781a15c.tar.gz
ipxe-dc7a023715e8c317e8013737ccd8960ff781a15c.tar.xz
ipxe-dc7a023715e8c317e8013737ccd8960ff781a15c.zip
[monojob] Report ongoing job status as overall return status on timeout
If a job times out then use the most recent ongoing error status reported via job_progress() (if available) as the overall return status. Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r--src/core/monojob.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/core/monojob.c b/src/core/monojob.c
index 94ed74c0f..5dbfa4062 100644
--- a/src/core/monojob.c
+++ b/src/core/monojob.c
@@ -69,6 +69,7 @@ int monojob_wait ( const char *string, unsigned long timeout ) {
unsigned long total;
unsigned int percentage;
int shown_percentage = 0;
+ int ongoing_rc;
int key;
int rc;
@@ -97,10 +98,13 @@ int monojob_wait ( const char *string, unsigned long timeout ) {
last_keycheck = now;
}
+ /* Monitor progress */
+ ongoing_rc = job_progress ( &monojob, &progress );
+
/* Check for timeout, if applicable */
elapsed = ( now - start );
if ( timeout && ( elapsed >= timeout ) ) {
- monojob_rc = -ETIMEDOUT;
+ monojob_rc = ( ongoing_rc ? ongoing_rc : -ETIMEDOUT );
break;
}
@@ -109,7 +113,6 @@ int monojob_wait ( const char *string, unsigned long timeout ) {
if ( string && ( elapsed >= TICKS_PER_SEC ) ) {
if ( shown_percentage )
printf ( "\b\b\b\b \b\b\b\b" );
- job_progress ( &monojob, &progress );
/* Normalise progress figures to avoid overflow */
completed = ( progress.completed / 128 );
total = ( progress.total / 128 );