Browse code

Merge pull request #5947 from glebfm/fix-socket-race-condition

Fix race condition during socket creation

Michael Crosby authored on 2014/05/31 07:07:06
Showing 1 changed files
... ...
@@ -1211,11 +1211,20 @@ func ListenAndServe(proto, addr string, job *engine.Job) error {
1211 1211
 		}
1212 1212
 	}
1213 1213
 
1214
+	var oldmask int
1215
+	if proto == "unix" {
1216
+		oldmask = syscall.Umask(0777)
1217
+	}
1218
+
1214 1219
 	if job.GetenvBool("BufferRequests") {
1215 1220
 		l, err = listenbuffer.NewListenBuffer(proto, addr, activationLock)
1216 1221
 	} else {
1217 1222
 		l, err = net.Listen(proto, addr)
1218 1223
 	}
1224
+
1225
+	if proto == "unix" {
1226
+		syscall.Umask(oldmask)
1227
+	}
1219 1228
 	if err != nil {
1220 1229
 		return err
1221 1230
 	}
... ...
@@ -1253,9 +1262,6 @@ func ListenAndServe(proto, addr string, job *engine.Job) error {
1253 1253
 			log.Println("/!\\ DON'T BIND ON ANOTHER IP ADDRESS THAN 127.0.0.1 IF YOU DON'T KNOW WHAT YOU'RE DOING /!\\")
1254 1254
 		}
1255 1255
 	case "unix":
1256
-		if err := os.Chmod(addr, 0660); err != nil {
1257
-			return err
1258
-		}
1259 1256
 		socketGroup := job.Getenv("SocketGroup")
1260 1257
 		if socketGroup != "" {
1261 1258
 			if err := changeGroup(addr, socketGroup); err != nil {
... ...
@@ -1267,6 +1273,9 @@ func ListenAndServe(proto, addr string, job *engine.Job) error {
1267 1267
 				}
1268 1268
 			}
1269 1269
 		}
1270
+		if err := os.Chmod(addr, 0660); err != nil {
1271
+			return err
1272
+		}
1270 1273
 	default:
1271 1274
 		return fmt.Errorf("Invalid protocol format.")
1272 1275
 	}