shithub: clone

Download patch

ref: e13af7f16f7c632d653222d58a61b2945ffe1da7
parent: b25f9d624d037d6dc7eb1e0762cfbd941cb99ffa
author: kvik <[email protected]>
date: Thu Nov 1 12:12:22 EDT 2018

don't wakeup wgwait unless it can continue

--- a/clone.c
+++ b/clone.c
@@ -114,11 +114,11 @@
 void
 wgdone(WaitGroup *wg)
 {
-	if(decref(wg) < 0)
-		sysfatal("wgdone: negative WaitGroup count");
-	qlock(wg);
-	rwakeupall(wg);
-	qunlock(wg);
+	if(decref(wg) == 0){
+		qlock(wg);
+		rwakeupall(wg);
+		qunlock(wg);
+	}
 }
 
 void
@@ -125,11 +125,10 @@
 wgwait(WaitGroup *wg)
 {
 	qlock(wg);
-	while(!(wg->ref == 0))
+	while(wg->ref != 0)
 		rsleep(wg);
 	qunlock(wg);
 }
-
 
 char *
 filename(char *s)