mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-02 16:11:21 +00:00
add some p2p TODOs
This commit is contained in:
parent
9e767771fc
commit
7640e6a29f
@ -406,6 +406,7 @@ func (c *MConnection) sendMsgPacket() bool {
|
|||||||
// recvRoutine reads msgPackets and reconstructs the message using the channels' "recving" buffer.
|
// recvRoutine reads msgPackets and reconstructs the message using the channels' "recving" buffer.
|
||||||
// After a whole message has been assembled, it's pushed to onReceive().
|
// After a whole message has been assembled, it's pushed to onReceive().
|
||||||
// Blocks depending on how the connection is throttled.
|
// Blocks depending on how the connection is throttled.
|
||||||
|
// Otherwise, it never blocks.
|
||||||
func (c *MConnection) recvRoutine() {
|
func (c *MConnection) recvRoutine() {
|
||||||
defer c._recover()
|
defer c._recover()
|
||||||
|
|
||||||
@ -449,8 +450,8 @@ FOR_LOOP:
|
|||||||
c.Logger.Debug("Receive Ping")
|
c.Logger.Debug("Receive Ping")
|
||||||
select {
|
select {
|
||||||
case c.pong <- struct{}{}:
|
case c.pong <- struct{}{}:
|
||||||
case <-c.quit:
|
default:
|
||||||
break FOR_LOOP
|
// never block
|
||||||
}
|
}
|
||||||
case packetTypePong:
|
case packetTypePong:
|
||||||
// do nothing
|
// do nothing
|
||||||
@ -494,8 +495,9 @@ FOR_LOOP:
|
|||||||
break FOR_LOOP
|
break FOR_LOOP
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: shouldn't this go in the sendRoutine?
|
// TODO: don't bother with this "only ping when we havent heard from them".
|
||||||
// Better to send a ping packet when *we* haven't sent anything for a while.
|
// lets just always ping every peer from the sendRoutine every 10s no matter what.
|
||||||
|
// if they dont pong within pongTimeout, disconnect :)
|
||||||
c.pingTimer.Reset()
|
c.pingTimer.Reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -691,7 +693,13 @@ func (ch *Channel) recvMsgPacket(packet msgPacket) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
ch.recving = append(ch.recving, packet.Bytes...)
|
ch.recving = append(ch.recving, packet.Bytes...)
|
||||||
if packet.EOF == byte(0x01) {
|
if packet.EOF == byte(0x01) {
|
||||||
|
// TODO: document that these returned msgBytes will change under you after Receive finishes.
|
||||||
|
// TODO: document it in the Reactor interface especially - implementations of a Reactor
|
||||||
|
// can not keep these bytes around after the Receive completes without copying!
|
||||||
|
// In general that's fine, because the first thing we do is unmarshal into a msg type and then
|
||||||
|
// we never use the bytes again
|
||||||
msgBytes := ch.recving
|
msgBytes := ch.recving
|
||||||
|
|
||||||
// clear the slice without re-allocating.
|
// clear the slice without re-allocating.
|
||||||
// http://stackoverflow.com/questions/16971741/how-do-you-clear-a-slice-in-go
|
// http://stackoverflow.com/questions/16971741/how-do-you-clear-a-slice-in-go
|
||||||
// suggests this could be a memory leak, but we might as well keep the memory for the channel until it closes,
|
// suggests this could be a memory leak, but we might as well keep the memory for the channel until it closes,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user