From: Michael Tremer Date: Fri, 16 Sep 2022 12:10:29 +0000 (+0000) Subject: progressbar: Always finish properly X-Git-Tag: 0.9.28~308 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d19d4dd4abe6ed48ec499a262fc0a485c814d34e;p=pakfire.git progressbar: Always finish properly Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/progressbar.c b/src/libpakfire/progressbar.c index 98031667f..ed218d38b 100644 --- a/src/libpakfire/progressbar.c +++ b/src/libpakfire/progressbar.c @@ -127,7 +127,29 @@ static void pakfire_progressbar_free_widgets(struct pakfire_progressbar* p) { } } +static int __pakfire_progressbar_finish(struct pakfire_progressbar* p) { + int r; + int retval = 0; + + // Do nothing if already finished + if (p->status == PAKFIRE_PROGRESSBAR_FINISHED) + return 0; + + // Set status + p->status = PAKFIRE_PROGRESSBAR_FINISHED; + + // Wait until the render thread is done + r = pthread_join(p->renderer, (void**)&retval); + if (r) + return r; + + return retval; +} + static void pakfire_progressbar_free(struct pakfire_progressbar* p) { + // Ensure the progressbar has finished + __pakfire_progressbar_finish(p); + pakfire_progressbar_free_widgets(p); free(p); } @@ -339,21 +361,10 @@ PAKFIRE_EXPORT int pakfire_progressbar_increment(struct pakfire_progressbar* p, } PAKFIRE_EXPORT int pakfire_progressbar_finish(struct pakfire_progressbar* p) { - int r; - int retval = 0; - if (p->status != PAKFIRE_PROGRESSBAR_RUNNING) return EINVAL; - // Set status - p->status = PAKFIRE_PROGRESSBAR_FINISHED; - - // Wait until the render thread is done - r = pthread_join(p->renderer, (void**)&retval); - if (r) - return r; - - return retval; + return __pakfire_progressbar_finish(p); } PAKFIRE_EXPORT int pakfire_progressbar_reset(struct pakfire_progressbar* p) {