Skip to content

Commit eabf04b

Browse files
committedSep 3, 2017
Network part requires SharedBuffers to be pass as value
This can trigger unreproductible crashes due to concurrency problem on SharedBuffers This fixes #6354
1 parent 2ac5a45 commit eabf04b

File tree

4 files changed

+8
-10
lines changed

4 files changed

+8
-10
lines changed
 

Diff for: ‎src/network/connection.cpp

+3-5
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ std::mutex log_message_mutex;
5555

5656
#define PING_TIMEOUT 5.0
5757

58-
BufferedPacket makePacket(Address &address, const SharedBuffer<u8> &data,
58+
BufferedPacket makePacket(Address &address, SharedBuffer<u8> data,
5959
u32 protocol_id, u16 sender_peer_id, u8 channel)
6060
{
6161
u32 packet_size = data.getSize() + BASE_HEADER_SIZE;
@@ -125,7 +125,7 @@ void makeSplitPacket(const SharedBuffer<u8> &data, u32 chunksize_max, u16 seqnum
125125
}
126126
}
127127

128-
void makeAutoSplitPacket(const SharedBuffer<u8> &data, u32 chunksize_max,
128+
void makeAutoSplitPacket(SharedBuffer<u8> data, u32 chunksize_max,
129129
u16 &split_seqnum, std::list<SharedBuffer<u8>> *list)
130130
{
131131
u32 original_header_size = 1;
@@ -139,9 +139,7 @@ void makeAutoSplitPacket(const SharedBuffer<u8> &data, u32 chunksize_max,
139139
list->push_back(makeOriginalPacket(data));
140140
}
141141

142-
SharedBuffer<u8> makeReliablePacket(
143-
const SharedBuffer<u8> &data,
144-
u16 seqnum)
142+
SharedBuffer<u8> makeReliablePacket(SharedBuffer<u8> data, u16 seqnum)
145143
{
146144
u32 header_size = 3;
147145
u32 packet_size = data.getSize() + header_size;

Diff for: ‎src/network/connection.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -102,16 +102,16 @@ struct BufferedPacket
102102
};
103103

104104
// This adds the base headers to the data and makes a packet out of it
105-
BufferedPacket makePacket(Address &address, const SharedBuffer<u8> &data,
105+
BufferedPacket makePacket(Address &address, SharedBuffer<u8> data,
106106
u32 protocol_id, u16 sender_peer_id, u8 channel);
107107

108108
// Depending on size, make a TYPE_ORIGINAL or TYPE_SPLIT packet
109109
// Increments split_seqnum if a split packet is made
110-
void makeAutoSplitPacket(const SharedBuffer<u8> &data, u32 chunksize_max,
110+
void makeAutoSplitPacket(SharedBuffer<u8> data, u32 chunksize_max,
111111
u16 &split_seqnum, std::list<SharedBuffer<u8>> *list);
112112

113113
// Add the TYPE_RELIABLE header to the data
114-
SharedBuffer<u8> makeReliablePacket(const SharedBuffer<u8> &data, u16 seqnum);
114+
SharedBuffer<u8> makeReliablePacket(SharedBuffer<u8> data, u16 seqnum);
115115

116116
struct IncomingSplitPacket
117117
{

Diff for: ‎src/network/connectionthreads.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ void ConnectionSendThread::sendAsPacketReliable(BufferedPacket &p, Channel *chan
330330
}
331331

332332
bool ConnectionSendThread::rawSendAsPacket(u16 peer_id, u8 channelnum,
333-
const SharedBuffer<u8> &data, bool reliable)
333+
SharedBuffer<u8> data, bool reliable)
334334
{
335335
PeerHelper peer = m_connection->getPeerNoEx(peer_id);
336336
if (!peer) {

Diff for: ‎src/network/connectionthreads.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class ConnectionSendThread : public Thread
5252
private:
5353
void runTimeouts(float dtime);
5454
void rawSend(const BufferedPacket &packet);
55-
bool rawSendAsPacket(u16 peer_id, u8 channelnum, const SharedBuffer<u8> &data,
55+
bool rawSendAsPacket(u16 peer_id, u8 channelnum, SharedBuffer<u8> data,
5656
bool reliable);
5757

5858
void processReliableCommand(ConnectionCommand &c);

0 commit comments

Comments
 (0)