diff options
author | Loic Blot <loic.blot@unix-experience.fr> | 2017-09-03 19:01:53 +0200 |
---|---|---|
committer | Loic Blot <loic.blot@unix-experience.fr> | 2017-09-03 19:01:53 +0200 |
commit | eabf04bd34b840ee3359609fc977cf4795b33a3a (patch) | |
tree | e44966316c6e121a2987a28a7c7decc5365b890c /src | |
parent | 2ac5a45faa26a9192ab3c3940d939b18b0df8b38 (diff) | |
download | minetest-eabf04bd34b840ee3359609fc977cf4795b33a3a.tar.gz minetest-eabf04bd34b840ee3359609fc977cf4795b33a3a.tar.bz2 minetest-eabf04bd34b840ee3359609fc977cf4795b33a3a.zip |
Network part requires SharedBuffers to be pass as value
This can trigger unreproductible crashes due to concurrency problem on SharedBuffers
This fixes #6354
Diffstat (limited to 'src')
-rw-r--r-- | src/network/connection.cpp | 8 | ||||
-rw-r--r-- | src/network/connection.h | 6 | ||||
-rw-r--r-- | src/network/connectionthreads.cpp | 2 | ||||
-rw-r--r-- | src/network/connectionthreads.h | 2 |
4 files changed, 8 insertions, 10 deletions
diff --git a/src/network/connection.cpp b/src/network/connection.cpp index 01f1a7e63..b2e443901 100644 --- a/src/network/connection.cpp +++ b/src/network/connection.cpp @@ -55,7 +55,7 @@ std::mutex log_message_mutex; #define PING_TIMEOUT 5.0 -BufferedPacket makePacket(Address &address, const SharedBuffer<u8> &data, +BufferedPacket makePacket(Address &address, SharedBuffer<u8> data, u32 protocol_id, u16 sender_peer_id, u8 channel) { u32 packet_size = data.getSize() + BASE_HEADER_SIZE; @@ -125,7 +125,7 @@ void makeSplitPacket(const SharedBuffer<u8> &data, u32 chunksize_max, u16 seqnum } } -void makeAutoSplitPacket(const SharedBuffer<u8> &data, u32 chunksize_max, +void makeAutoSplitPacket(SharedBuffer<u8> data, u32 chunksize_max, u16 &split_seqnum, std::list<SharedBuffer<u8>> *list) { u32 original_header_size = 1; @@ -139,9 +139,7 @@ void makeAutoSplitPacket(const SharedBuffer<u8> &data, u32 chunksize_max, list->push_back(makeOriginalPacket(data)); } -SharedBuffer<u8> makeReliablePacket( - const SharedBuffer<u8> &data, - u16 seqnum) +SharedBuffer<u8> makeReliablePacket(SharedBuffer<u8> data, u16 seqnum) { u32 header_size = 3; u32 packet_size = data.getSize() + header_size; diff --git a/src/network/connection.h b/src/network/connection.h index c54161cc9..e1bb613f0 100644 --- a/src/network/connection.h +++ b/src/network/connection.h @@ -102,16 +102,16 @@ struct BufferedPacket }; // This adds the base headers to the data and makes a packet out of it -BufferedPacket makePacket(Address &address, const SharedBuffer<u8> &data, +BufferedPacket makePacket(Address &address, SharedBuffer<u8> data, u32 protocol_id, u16 sender_peer_id, u8 channel); // Depending on size, make a TYPE_ORIGINAL or TYPE_SPLIT packet // Increments split_seqnum if a split packet is made -void makeAutoSplitPacket(const SharedBuffer<u8> &data, u32 chunksize_max, +void makeAutoSplitPacket(SharedBuffer<u8> data, u32 chunksize_max, u16 &split_seqnum, std::list<SharedBuffer<u8>> *list); // Add the TYPE_RELIABLE header to the data -SharedBuffer<u8> makeReliablePacket(const SharedBuffer<u8> &data, u16 seqnum); +SharedBuffer<u8> makeReliablePacket(SharedBuffer<u8> data, u16 seqnum); struct IncomingSplitPacket { diff --git a/src/network/connectionthreads.cpp b/src/network/connectionthreads.cpp index 63c1855c5..ec09e9d3e 100644 --- a/src/network/connectionthreads.cpp +++ b/src/network/connectionthreads.cpp @@ -330,7 +330,7 @@ void ConnectionSendThread::sendAsPacketReliable(BufferedPacket &p, Channel *chan } bool ConnectionSendThread::rawSendAsPacket(u16 peer_id, u8 channelnum, - const SharedBuffer<u8> &data, bool reliable) + SharedBuffer<u8> data, bool reliable) { PeerHelper peer = m_connection->getPeerNoEx(peer_id); if (!peer) { diff --git a/src/network/connectionthreads.h b/src/network/connectionthreads.h index c2314f87f..906866468 100644 --- a/src/network/connectionthreads.h +++ b/src/network/connectionthreads.h @@ -52,7 +52,7 @@ public: private: void runTimeouts(float dtime); void rawSend(const BufferedPacket &packet); - bool rawSendAsPacket(u16 peer_id, u8 channelnum, const SharedBuffer<u8> &data, + bool rawSendAsPacket(u16 peer_id, u8 channelnum, SharedBuffer<u8> data, bool reliable); void processReliableCommand(ConnectionCommand &c); |