Browse Source

modes: Fix some more mutexes

tags/v0.6.0
Daniel Oaks 7 years ago
parent
commit
e9324c3250
2 changed files with 8 additions and 9 deletions
  1. 5
    6
      irc/channel.go
  2. 3
    3
      irc/modes.go

+ 5
- 6
irc/channel.go View File

185
 }
185
 }
186
 
186
 
187
 // <mode> <mode params>
187
 // <mode> <mode params>
188
-func (channel *Channel) ModeString(client *Client) (str string) {
189
-	channel.membersMutex.RLock()
188
+func (channel *Channel) modeStringNoLock(client *Client) (str string) {
189
+	// RLock()
190
 	isMember := client.flags[Operator] || channel.members.Has(client)
190
 	isMember := client.flags[Operator] || channel.members.Has(client)
191
-	channel.membersMutex.RUnlock()
191
+	// RUnlock()
192
 	showKey := isMember && (channel.key != "")
192
 	showKey := isMember && (channel.key != "")
193
 	showUserLimit := channel.userLimit > 0
193
 	showUserLimit := channel.userLimit > 0
194
 
194
 
436
 	return false
436
 	return false
437
 }
437
 }
438
 
438
 
439
-func (channel *Channel) applyModeMember(client *Client, mode ChannelMode,
439
+func (channel *Channel) applyModeMemberNoMutex(client *Client, mode ChannelMode,
440
 	op ModeOp, nick string) *ChannelModeChange {
440
 	op ModeOp, nick string) *ChannelModeChange {
441
-	channel.membersMutex.Lock()
442
-	defer channel.membersMutex.Unlock()
441
+	// requires Lock()
443
 
442
 
444
 	if nick == "" {
443
 	if nick == "" {
445
 		//TODO(dan): shouldn't this be handled before it reaches this function?
444
 		//TODO(dan): shouldn't this be handled before it reaches this function?

+ 3
- 3
irc/modes.go View File

414
 		// so we only output one warning for each list type when full
414
 		// so we only output one warning for each list type when full
415
 		listFullWarned := make(map[ChannelMode]bool)
415
 		listFullWarned := make(map[ChannelMode]bool)
416
 
416
 
417
-		clientIsOp := channel.ClientIsAtLeast(client, ChannelOperator)
417
+		clientIsOp := channel.clientIsAtLeastNoMutex(client, ChannelOperator)
418
 		var alreadySentPrivError bool
418
 		var alreadySentPrivError bool
419
 
419
 
420
 		for _, change := range changes {
420
 		for _, change := range changes {
545
 					}
545
 					}
546
 				}
546
 				}
547
 
547
 
548
-				change := channel.applyModeMember(client, change.mode, change.op, change.arg)
548
+				change := channel.applyModeMemberNoMutex(client, change.mode, change.op, change.arg)
549
 				if change != nil {
549
 				if change != nil {
550
 					applied = append(applied, change)
550
 					applied = append(applied, change)
551
 				}
551
 				}
561
 		}
561
 		}
562
 	} else {
562
 	} else {
563
 		//TODO(dan): we should just make ModeString return a slice here
563
 		//TODO(dan): we should just make ModeString return a slice here
564
-		args := append([]string{client.nick, channel.name}, strings.Split(channel.ModeString(client), " ")...)
564
+		args := append([]string{client.nick, channel.name}, strings.Split(channel.modeStringNoLock(client), " ")...)
565
 		client.Send(nil, client.nickMaskString, RPL_CHANNELMODEIS, args...)
565
 		client.Send(nil, client.nickMaskString, RPL_CHANNELMODEIS, args...)
566
 		client.Send(nil, client.nickMaskString, RPL_CHANNELCREATED, client.nick, channel.name, strconv.FormatInt(channel.createdTime.Unix(), 10))
566
 		client.Send(nil, client.nickMaskString, RPL_CHANNELCREATED, client.nick, channel.name, strconv.FormatInt(channel.createdTime.Unix(), 10))
567
 	}
567
 	}

Loading…
Cancel
Save