]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[monojob] Report ongoing job status as overall return status on timeout
authorMichael Brown <mcb30@ipxe.org>
Fri, 1 Nov 2013 15:13:33 +0000 (15:13 +0000)
committerMichael Brown <mcb30@ipxe.org>
Fri, 1 Nov 2013 16:26:08 +0000 (16:26 +0000)
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>
src/core/monojob.c

index 94ed74c0f22de4bc05dbd99407b3c245b811acd3..5dbfa40629523d2a6f3212c3b3413927229cd37b 100644 (file)
@@ -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 );