From dc7a023715e8c317e8013737ccd8960ff781a15c Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 1 Nov 2013 15:13:33 +0000 Subject: [PATCH] [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 --- src/core/monojob.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/core/monojob.c b/src/core/monojob.c index 94ed74c0..5dbfa406 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 );