summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@gmail.com>2011-08-08 21:44:23 -0600
committerTavian Barnes <tavianator@gmail.com>2011-08-08 21:44:23 -0600
commitd8a599acb5150d28473c443baca293a87a9fdad0 (patch)
tree7c501f624d5ea02f31fb689a1deae8d2f129e710
parent054631fe16ae43e029733314d2cc2b9070b33823 (diff)
downloaddimension-d8a599acb5150d28473c443baca293a87a9fdad0.tar.xz
Make min_wait less hacky.
I wish C had the `mutable' keyword.
-rw-r--r--libdimension/progress-impl.h3
-rw-r--r--libdimension/progress.c14
2 files changed, 9 insertions, 8 deletions
diff --git a/libdimension/progress-impl.h b/libdimension/progress-impl.h
index 973c161..6c10ff8 100644
--- a/libdimension/progress-impl.h
+++ b/libdimension/progress-impl.h
@@ -51,6 +51,5 @@ struct dmnsn_progress {
pthread_mutex_t *mutex;
/* Minimum waited-on value */
- volatile double min_wait;
- volatile double *min_waitp; /* Hack for const values */
+ double *min_wait;
};
diff --git a/libdimension/progress.c b/libdimension/progress.c
index 7344679..17fa7dc 100644
--- a/libdimension/progress.c
+++ b/libdimension/progress.c
@@ -45,8 +45,8 @@ dmnsn_new_progress(void)
progress->mutex = dmnsn_malloc(sizeof(pthread_mutex_t));
dmnsn_initialize_mutex(progress->mutex);
- progress->min_wait = 1.0;
- progress->min_waitp = &progress->min_wait;
+ progress->min_wait = dmnsn_malloc(sizeof(double));
+ *progress->min_wait = 1.0;
return progress;
}
@@ -69,6 +69,8 @@ dmnsn_finish_progress(dmnsn_progress *progress)
/* Free the progress object */
+ dmnsn_free(progress->min_wait);
+
dmnsn_destroy_mutex(progress->mutex);
dmnsn_free(progress->mutex);
@@ -104,8 +106,8 @@ dmnsn_wait_progress(const dmnsn_progress *progress, double prog)
dmnsn_lock_mutex(progress->mutex);
while (dmnsn_get_progress(progress) < prog) {
/* Set the minimum waited-on value */
- if (prog < progress->min_wait)
- *progress->min_waitp = prog;
+ if (prog < *progress->min_wait)
+ *progress->min_wait = prog;
dmnsn_cond_wait(progress->cond, progress->mutex);
}
@@ -130,8 +132,8 @@ dmnsn_increment_progress(dmnsn_progress *progress)
dmnsn_unlock_rwlock(progress->rwlock);
dmnsn_lock_mutex(progress->mutex);
- if (dmnsn_get_progress(progress) >= progress->min_wait) {
- progress->min_wait = 1.0;
+ if (dmnsn_get_progress(progress) >= *progress->min_wait) {
+ *progress->min_wait = 1.0;
dmnsn_cond_broadcast(progress->cond);
}