瀏覽代碼

fix data race on exitedSnomaskSent

tags/v1.1.0-rc1
Shivaram Lingamneni 5 年之前
父節點
當前提交
5ac7ea5b1c
共有 3 個文件被更改,包括 11 次插入4 次删除
  1. 2
    1
      irc/client.go
  2. 6
    0
      irc/getters.go
  3. 3
    3
      irc/handlers.go

+ 2
- 1
irc/client.go 查看文件

@@ -987,6 +987,7 @@ func (client *Client) destroy(session *Session) {
987 987
 		// if it's our job to destroy it, don't let anyone else try
988 988
 		client.destroyed = true
989 989
 	}
990
+	exitedSnomaskSent := client.exitedSnomaskSent
990 991
 	client.stateMutex.Unlock()
991 992
 
992 993
 	// destroy all applicable sessions:
@@ -1101,7 +1102,7 @@ func (client *Client) destroy(session *Session) {
1101 1102
 		friend.sendFromClientInternal(false, splitQuitMessage.Time, splitQuitMessage.Msgid, details.nickMask, details.accountName, nil, "QUIT", quitMessage)
1102 1103
 	}
1103 1104
 
1104
-	if !client.exitedSnomaskSent && registered {
1105
+	if !exitedSnomaskSent && registered {
1105 1106
 		client.server.snomasks.Send(sno.LocalQuits, fmt.Sprintf(ircfmt.Unescape("%s$r exited the network"), details.nick))
1106 1107
 	}
1107 1108
 }

+ 6
- 0
irc/getters.go 查看文件

@@ -187,6 +187,12 @@ func (client *Client) SetAway(away bool, awayMessage string) (changed bool) {
187 187
 	return
188 188
 }
189 189
 
190
+func (client *Client) SetExitedSnomaskSent() {
191
+	client.stateMutex.Lock()
192
+	client.exitedSnomaskSent = true
193
+	client.stateMutex.Unlock()
194
+}
195
+
190 196
 // uniqueIdentifiers returns the strings for which the server enforces per-client
191 197
 // uniqueness/ownership; no two clients can have colliding casefolded nicks or
192 198
 // skeletons.

+ 3
- 3
irc/handlers.go 查看文件

@@ -1052,7 +1052,7 @@ func dlineHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Res
1052 1052
 		}
1053 1053
 
1054 1054
 		for _, mcl := range clientsToKill {
1055
-			mcl.exitedSnomaskSent = true
1055
+			mcl.SetExitedSnomaskSent()
1056 1056
 			mcl.Quit(fmt.Sprintf(mcl.t("You have been banned from this server (%s)"), reason), nil)
1057 1057
 			if mcl == client {
1058 1058
 				killClient = true
@@ -1362,7 +1362,7 @@ func killHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
1362 1362
 	quitMsg := fmt.Sprintf("Killed (%s (%s))", client.nick, comment)
1363 1363
 
1364 1364
 	server.snomasks.Send(sno.LocalKills, fmt.Sprintf(ircfmt.Unescape("%s$r was killed by %s $c[grey][$r%s$c[grey]]"), target.nick, client.nick, comment))
1365
-	target.exitedSnomaskSent = true
1365
+	target.SetExitedSnomaskSent()
1366 1366
 
1367 1367
 	target.Quit(quitMsg, nil)
1368 1368
 	target.destroy(nil)
@@ -1489,7 +1489,7 @@ func klineHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Res
1489 1489
 		}
1490 1490
 
1491 1491
 		for _, mcl := range clientsToKill {
1492
-			mcl.exitedSnomaskSent = true
1492
+			mcl.SetExitedSnomaskSent()
1493 1493
 			mcl.Quit(fmt.Sprintf(mcl.t("You have been banned from this server (%s)"), reason), nil)
1494 1494
 			if mcl == client {
1495 1495
 				killClient = true

Loading…
取消
儲存