| Index: remoting/protocol/message_reader.h
|
| diff --git a/remoting/protocol/message_reader.h b/remoting/protocol/message_reader.h
|
| index 3c33b5ae30bb054ceaaab79555a27be6c1330c77..b2bfffebd2f2bfeafaa8367b6638582f481796ba 100644
|
| --- a/remoting/protocol/message_reader.h
|
| +++ b/remoting/protocol/message_reader.h
|
| @@ -37,11 +37,7 @@ namespace protocol {
|
| // e.g. when we the sender sends multiple messages in one TCP packet.
|
| class MessageReader : public base::RefCountedThreadSafe<MessageReader> {
|
| public:
|
| - // The callback is given ownership of the second argument
|
| - // (|done_task|). The buffer (first argument) is owned by
|
| - // MessageReader and is freed when the task specified by the second
|
| - // argument is called.
|
| - typedef base::Callback<void(CompoundBuffer*, const base::Closure&)>
|
| + typedef base::Callback<void(scoped_ptr<CompoundBuffer>, const base::Closure&)>
|
| MessageReceivedCallback;
|
|
|
| MessageReader();
|
| @@ -56,8 +52,7 @@ class MessageReader : public base::RefCountedThreadSafe<MessageReader> {
|
| void OnRead(int result);
|
| void HandleReadResult(int result);
|
| void OnDataReceived(net::IOBuffer* data, int data_size);
|
| - void OnMessageDone(CompoundBuffer* message,
|
| - scoped_refptr<base::MessageLoopProxy> message_loop);
|
| + void OnMessageDone(scoped_refptr<base::MessageLoopProxy> message_loop);
|
| void ProcessDoneEvent();
|
|
|
| net::Socket* socket_;
|
| @@ -85,7 +80,7 @@ class MessageReader : public base::RefCountedThreadSafe<MessageReader> {
|
| template <class T>
|
| class ProtobufMessageReader {
|
| public:
|
| - typedef typename base::Callback<void(T*, const base::Closure&)>
|
| + typedef typename base::Callback<void(scoped_ptr<T>, const base::Closure&)>
|
| MessageReceivedCallback;
|
|
|
| ProtobufMessageReader() { };
|
| @@ -101,25 +96,19 @@ class ProtobufMessageReader {
|
| }
|
|
|
| private:
|
| - void OnNewData(CompoundBuffer* buffer, const base::Closure& done_task) {
|
| - T* message = new T();
|
| - CompoundBufferInputStream stream(buffer);
|
| + void OnNewData(scoped_ptr<CompoundBuffer> buffer,
|
| + const base::Closure& done_task) {
|
| + scoped_ptr<T> message(new T());
|
| + CompoundBufferInputStream stream(buffer.get());
|
| bool ret = message->ParseFromZeroCopyStream(&stream);
|
| if (!ret) {
|
| LOG(WARNING) << "Received message that is not a valid protocol buffer.";
|
| - delete message;
|
| } else {
|
| DCHECK_EQ(stream.position(), buffer->total_bytes());
|
| - message_received_callback_.Run(message, base::Bind(
|
| - &ProtobufMessageReader<T>::OnDone, message, done_task));
|
| + message_received_callback_.Run(message.Pass(), done_task);
|
| }
|
| }
|
|
|
| - static void OnDone(T* message, const base::Closure& done_task) {
|
| - delete message;
|
| - done_task.Run();
|
| - }
|
| -
|
| scoped_refptr<MessageReader> message_reader_;
|
| MessageReceivedCallback message_received_callback_;
|
| };
|
|
|