#ifdef CONFIG_ZLIB
-static void drop_data(struct iolog_flush_data *data, int refs)
+static void drop_data_unlock(struct iolog_flush_data *data)
{
+ int refs;
+
+ refs = --data->refs;
+ pthread_mutex_unlock(&data->lock);
+
if (!refs) {
free(data);
pthread_mutex_destroy(&data->lock);
ret = 0;
done:
if (data->wait) {
- int refs;
-
pthread_mutex_lock(&data->lock);
data->done = 1;
pthread_cond_signal(&data->cv);
- refs = --data->refs;
- pthread_mutex_unlock(&data->lock);
- drop_data(data, refs);
+
+ drop_data_unlock(data);
} else
free(data);
return ret;
workqueue_enqueue(&log->td->log_compress_wq, &data->work);
if (wait) {
- int refs;
-
pthread_mutex_lock(&data->lock);
while (!data->done)
pthread_cond_wait(&data->cv, &data->lock);
- refs = --data->refs;
- pthread_mutex_unlock(&data->lock);
- drop_data(data, refs);
+
+ drop_data_unlock(data);
}
return 0;