-void set_sync_flag(struct sync_flag *s) {
- pthread_mutex_lock(&s->mutex);
- s->flag = true;
- pthread_cond_broadcast(&s->cond);
- pthread_mutex_unlock(&s->mutex);
+void init_sync_flag(struct sync_flag *s) {
+ assert(pthread_mutex_init(&s->mutex, NULL) == 0);
+ assert(pthread_cond_init(&s->cond, NULL) == 0);
+ s->flag = false;
+}
+
+void set_sync_flag(struct sync_flag *s, bool value) {
+ assert(pthread_mutex_lock(&s->mutex) == 0);
+ s->flag = value;
+ assert(pthread_cond_broadcast(&s->cond) == 0);
+ assert(pthread_mutex_unlock(&s->mutex) == 0);
+}
+
+void reset_sync_flag(struct sync_flag *s) {
+ assert(pthread_mutex_lock(&s->mutex) == 0);
+ s->flag = false;
+ assert(pthread_mutex_unlock(&s->mutex) == 0);
+}
+
+bool check_sync_flag(struct sync_flag *s) {
+ bool flag;
+ assert(pthread_mutex_lock(&s->mutex) == 0);
+ flag = s->flag;
+ assert(pthread_mutex_unlock(&s->mutex) == 0);
+ return flag;