diff options
author | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2019-12-22 15:23:35 +0100 |
---|---|---|
committer | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2019-12-22 15:35:44 +0100 |
commit | cbc772d696e0148f2788f3b78115c70296d6d34a (patch) | |
tree | 07a2e5422ab3d1eb93489ddda24db5c3c9457f79 | |
parent | 8938577459ba1f33a814833c06d92e775c04bb5e (diff) |
Fix buffers size calculation in PacketPeerStream.
The calculation used to be wrong when exactly at a power of 2.
`nearest_shift` always return the "next" power of 2
`nearest_shift(4) == 3 # 2^3 = 8`.
On the other hand `next_power_of_2` returns the exact value if that
value is a power of 2 (i.e. `next_power_of_2(4) == 4`).
I.e. :
```
WARN_PRINT(itos(next_power_of_2(4)) + " " + itos(1 << nearest_shift(4)));
// WARNING: ... : 4 8
```
Is this by design?
-rw-r--r-- | core/io/packet_peer.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/core/io/packet_peer.cpp b/core/io/packet_peer.cpp index 23dfc58385..03bc4d453a 100644 --- a/core/io/packet_peer.cpp +++ b/core/io/packet_peer.cpp @@ -282,7 +282,7 @@ void PacketPeerStream::set_input_buffer_max_size(int p_max_size) { ERR_FAIL_COND_MSG(p_max_size < 0, "Max size of input buffer size cannot be smaller than 0."); //warning may lose packets ERR_FAIL_COND_MSG(ring_buffer.data_left(), "Buffer in use, resizing would cause loss of data."); - ring_buffer.resize(nearest_shift(p_max_size + 4)); + ring_buffer.resize(nearest_shift(next_power_of_2(p_max_size + 4)) - 1); input_buffer.resize(next_power_of_2(p_max_size + 4)); } |