Просмотр исходного кода

Fix bug to avoid race conditions on split mode counters

sinku 1 месяц назад
Родитель
Сommit
19a87fdb14
1 измененных файлов с 9 добавлено и 9 удалено
  1. 9 9
      psiphon/common/inproxy/proxy.go

+ 9 - 9
psiphon/common/inproxy/proxy.go

@@ -380,21 +380,21 @@ func (p *Proxy) Run(ctx context.Context) {
 
 	commonProxiesToCreate, personalProxiesToCreate := p.config.MaxCommonClients, p.config.MaxPersonalClients
 
+	// Doing this outside of the go routine to avoid race conditions
+	firstWorkerIsPersonal := p.config.MaxCommonClients <= 0
+	if firstWorkerIsPersonal {
+		personalProxiesToCreate -= 1
+	} else {
+		commonProxiesToCreate -= 1
+	}
+
 	signalFirstAnnounceCtx, signalFirstAnnounceDone :=
 		context.WithCancel(context.Background())
 
 	proxyWaitGroup.Add(1)
 	go func() {
 		defer proxyWaitGroup.Done()
-		if p.config.MaxCommonClients <= 0 {
-			// Create personal if no common clients are allowed
-			p.proxyClients(ctx, signalFirstAnnounceDone, false, true)
-			personalProxiesToCreate -= 1
-		} else {
-			// Create common
-			p.proxyClients(ctx, signalFirstAnnounceDone, false, false)
-			commonProxiesToCreate -= 1
-		}
+		p.proxyClients(ctx, signalFirstAnnounceDone, false, firstWorkerIsPersonal)
 	}()
 
 	select {