}
}
+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);
}
}
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) {