Bläddra i källkod

fix a deadlock in CS AMODE

tags/v1.1.0-rc1
Shivaram Lingamneni 5 år sedan
förälder
incheckning
a729772f0c
1 ändrade filer med 9 tillägg och 2 borttagningar
  1. 9
    2
      irc/modes.go

+ 9
- 2
irc/modes.go Visa fil

@@ -261,6 +261,13 @@ func (channel *Channel) ProcessAccountToUmodeChange(client *Client, change modes
261 261
 		return l == r || umodeGreaterThan(l, r)
262 262
 	}
263 263
 
264
+	changed := false
265
+	defer func() {
266
+		if changed {
267
+			channel.MarkDirty(IncludeLists)
268
+		}
269
+	}()
270
+
264 271
 	account := client.Account()
265 272
 	isOperChange := client.HasRoleCapabs("chanreg")
266 273
 
@@ -290,14 +297,14 @@ func (channel *Channel) ProcessAccountToUmodeChange(client *Client, change modes
290 297
 	case modes.Add:
291 298
 		if targetModeNow != targetModeAfter {
292 299
 			channel.accountToUMode[change.Arg] = change.Mode
293
-			channel.MarkDirty(IncludeLists)
300
+			changed = true
294 301
 			return []modes.ModeChange{change}, nil
295 302
 		}
296 303
 		return nil, nil
297 304
 	case modes.Remove:
298 305
 		if targetModeNow == change.Mode {
299 306
 			delete(channel.accountToUMode, change.Arg)
300
-			channel.MarkDirty(IncludeLists)
307
+			changed = true
301 308
 			return []modes.ModeChange{change}, nil
302 309
 		}
303 310
 		return nil, nil

Laddar…
Avbryt
Spara