Skip to content

Commit

Permalink
Increment success and fail channel length to prevent potential signal…
Browse files Browse the repository at this point in the history
… loss

Signed-off-by: Yilun <[email protected]>
  • Loading branch information
yilunzhang committed Mar 30, 2020
1 parent e4bb045 commit 437fed1
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 23 deletions.
34 changes: 18 additions & 16 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ func NewClient(account *Account, identifier string, config *ClientConfig) (*Clie
OnConnect: NewOnConnect(1, nil),
OnMessage: NewOnMessage(int(config.MsgChanLen), nil),
OnBlock: NewOnBlock(int(config.BlockChanLen), nil),
reconnectChan: make(chan struct{}, 0),
reconnectChan: make(chan struct{}, 1),
responseChannels: cache.New(time.Duration(config.MsgCacheExpiration)*time.Millisecond, time.Duration(config.MsgCacheExpiration)*time.Millisecond),
sharedKeys: make(map[string]*[sharedKeySize]byte),
}
Expand Down Expand Up @@ -805,22 +805,24 @@ func (c *Client) processDests(dests []string) ([]string, error) {
func (c *Client) newPayloads(dests []string, payload *payloads.Payload, encrypted bool) ([][]byte, error) {
if encrypted {
return c.encryptPayload(payload, dests)
} else {
payloadData, err := proto.Marshal(payload)
if err != nil {
return nil, err
}
data, err := proto.Marshal(&payloads.Message{
Payload: payloadData,
Encrypted: false,
Nonce: nil,
EncryptedKey: nil,
})
if err != nil {
return nil, err
}
return [][]byte{data}, nil
}

payloadData, err := proto.Marshal(payload)
if err != nil {
return nil, err
}

data, err := proto.Marshal(&payloads.Message{
Payload: payloadData,
Encrypted: false,
Nonce: nil,
EncryptedKey: nil,
})
if err != nil {
return nil, err
}

return [][]byte{data}, nil
}

func (c *Client) newOutboundMessage(dests []string, plds [][]byte, encrypted bool, maxHoldingSeconds int32) (*pb.OutboundMessage, error) {
Expand Down
19 changes: 12 additions & 7 deletions multiclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -269,13 +269,14 @@ func (m *MultiClient) Send(dests *StringArray, data interface{}, config *Message
}
}

success := make(chan struct{}, 0)
fail := make(chan struct{}, 0)
success := make(chan struct{}, 1)
fail := make(chan struct{}, 1)

go func() {
sent := 0
for clientID := range m.Clients {
if err := m.sendWithClient(clientID, dests.Elems, payload, !config.Unencrypted, config.MaxHoldingSeconds); err == nil {
err := m.sendWithClient(clientID, dests.Elems, payload, !config.Unencrypted, config.MaxHoldingSeconds)
if err == nil {
select {
case success <- struct{}{}:
default:
Expand Down Expand Up @@ -322,12 +323,13 @@ func (m *MultiClient) SendText(dests *StringArray, data string, config *MessageC
func (m *MultiClient) send(dests []string, payload *payloads.Payload, encrypted bool, maxHoldingSeconds int32) error {
var lock sync.Mutex
var errMsg []string
success := make(chan struct{}, 0)
fail := make(chan struct{}, 0)
success := make(chan struct{}, 1)
fail := make(chan struct{}, 1)
go func() {
sent := 0
for clientID := range m.Clients {
if err := m.sendWithClient(clientID, dests, payload, encrypted, maxHoldingSeconds); err == nil {
err := m.sendWithClient(clientID, dests, payload, encrypted, maxHoldingSeconds)
if err == nil {
select {
case success <- struct{}{}:
default:
Expand All @@ -340,7 +342,10 @@ func (m *MultiClient) send(dests []string, payload *payloads.Payload, encrypted
}
}
if sent == 0 {
fail <- struct{}{}
select {
case fail <- struct{}{}:
default:
}
}
}()

Expand Down

0 comments on commit 437fed1

Please sign in to comment.