Skip to content

Commit d16fc41

Browse files
committed
Make MessageQueue::pop return a unique_ptr
Avoids accidental memory leaks
1 parent 423c6e3 commit d16fc41

2 files changed

Lines changed: 9 additions & 20 deletions

File tree

libs/network/include/s25util/MessageQueue.h

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@
44

55
#pragma once
66

7+
#include "Message.h"
78
#include "MessageHandler.h"
89
#include <boost/ptr_container/ptr_deque.hpp>
910
#include <cstddef>
1011
#include <deque>
12+
#include <memory>
1113
#include <queue>
1214

13-
class Message;
1415
class Socket;
1516

1617
// class Socket;
@@ -45,12 +46,9 @@ class MessageQueue : protected MessageHandler
4546
/// hängt ein Element hinten an.
4647
void push(Message* message);
4748
/// liefert das vorderste Element der Queue.
48-
Message* front();
49+
Message* peek();
4950
/// entfernt das vorderste Element aus der Queue.
50-
void pop();
51-
/// Returns the first element and removes it from the queue. Returns nullptr if there is none
52-
/// Caller is responsible for deleting it!
53-
Message* popFront();
51+
std::unique_ptr<Message> pop();
5452

5553
private:
5654
boost::ptr_deque<Message> messages;

libs/network/src/MessageQueue.cpp

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,25 +25,16 @@ void MessageQueue::push(Message* message)
2525
messages.push_back(message);
2626
}
2727

28-
Message* MessageQueue::front()
28+
Message* MessageQueue::peek()
2929
{
30-
return (!messages.empty() ? &messages.front() : nullptr);
30+
return messages.empty() ? nullptr : &messages.front();
3131
}
3232

33-
/**
34-
* entfernt das vorderste Element aus der Queue.
35-
*/
36-
void MessageQueue::pop()
37-
{
38-
if(!messages.empty())
39-
messages.pop_front();
40-
}
41-
42-
Message* MessageQueue::popFront()
33+
std::unique_ptr<Message> MessageQueue::pop()
4334
{
4435
if(messages.empty())
4536
return nullptr;
46-
return messages.pop_front().release();
37+
return std::unique_ptr<Message>(messages.pop_front().release());
4738
}
4839

4940
int MessageQueue::recv(Socket& sock, unsigned timeoutInMs)
@@ -98,7 +89,7 @@ bool MessageQueue::send(Socket& sock, int max, unsigned sizelimit)
9889
int count = 0;
9990
while(count <= max && !messages.empty())
10091
{
101-
const Message& msg = *front(); //-V522
92+
const Message& msg = *peek(); //-V522
10293

10394
if(msg.getId() > 0)
10495
{

0 commit comments

Comments
 (0)