Commit b1f57595bd978aa9574fbde2f2461e09d2ebf23e

Kano 2013-08-10T10:12:15

avalon init write_sem before use

diff --git a/driver-avalon.c b/driver-avalon.c
index aec768e..752c49f 100644
--- a/driver-avalon.c
+++ b/driver-avalon.c
@@ -709,9 +709,11 @@ static bool avalon_detect_one(libusb_device *dev, struct usb_find_devices *found
 	if (!add_cgpu(avalon))
 		goto unshin;
 
+	cgsem_init(&info->write_sem);
+
 	ret = avalon_reset(avalon, true);
 	if (ret && !configured)
-		goto unshin;
+		goto unshinsem;
 
 	update_usb_stats(avalon);
 
@@ -735,6 +737,10 @@ static bool avalon_detect_one(libusb_device *dev, struct usb_find_devices *found
 
 	return true;
 
+unshinsem:
+
+	cgsem_destroy(&info->write_sem);
+
 unshin:
 
 	usb_uninit(avalon);
@@ -1079,7 +1085,6 @@ static bool avalon_prepare(struct thr_info *thr)
 	mutex_init(&info->qlock);
 	if (unlikely(pthread_cond_init(&info->qcond, NULL)))
 		quit(1, "Failed to pthread_cond_init avalon qcond");
-	cgsem_init(&info->write_sem);
 
 	if (pthread_create(&info->read_thr, NULL, avalon_get_results, (void *)avalon))
 		quit(1, "Failed to create avalon read_thr");