Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(329)

Side by Side Diff: runtime/vm/service_test.cc

Issue 2629413003: Fix memory leak in ServiceTestMessageHandler. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/tests/vm/vm.status ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "platform/globals.h" 5 #include "platform/globals.h"
6 6
7 #include "include/dart_tools_api.h" 7 #include "include/dart_tools_api.h"
8 #include "vm/dart_api_impl.h" 8 #include "vm/dart_api_impl.h"
9 #include "vm/dart_entry.h" 9 #include "vm/dart_entry.h"
10 #include "vm/debugger.h" 10 #include "vm/debugger.h"
(...skipping 15 matching lines...) Expand all
26 26
27 class ServiceTestMessageHandler : public MessageHandler { 27 class ServiceTestMessageHandler : public MessageHandler {
28 public: 28 public:
29 ServiceTestMessageHandler() : _msg(NULL) {} 29 ServiceTestMessageHandler() : _msg(NULL) {}
30 30
31 ~ServiceTestMessageHandler() { free(_msg); } 31 ~ServiceTestMessageHandler() { free(_msg); }
32 32
33 MessageStatus HandleMessage(Message* message) { 33 MessageStatus HandleMessage(Message* message) {
34 if (_msg != NULL) { 34 if (_msg != NULL) {
35 free(_msg); 35 free(_msg);
36 _msg = NULL;
36 } 37 }
37 38
38 // Parse the message. 39 // Parse the message.
39 Object& response_obj = Object::Handle(); 40 Object& response_obj = Object::Handle();
40 if (message->IsRaw()) { 41 if (message->IsRaw()) {
41 response_obj = message->raw_obj(); 42 response_obj = message->raw_obj();
42 } else { 43 } else {
43 Thread* thread = Thread::Current(); 44 Thread* thread = Thread::Current();
44 MessageSnapshotReader reader(message->data(), message->len(), thread); 45 MessageSnapshotReader reader(message->data(), message->len(), thread);
45 response_obj = reader.ReadObject(); 46 response_obj = reader.ReadObject();
46 } 47 }
47 if (response_obj.IsString()) { 48 if (response_obj.IsString()) {
48 String& response = String::Handle(); 49 String& response = String::Handle();
49 response ^= response_obj.raw(); 50 response ^= response_obj.raw();
50 _msg = strdup(response.ToCString()); 51 _msg = strdup(response.ToCString());
51 } else { 52 } else {
52 ASSERT(response_obj.IsArray()); 53 ASSERT(response_obj.IsArray());
53 Array& response_array = Array::Handle(); 54 Array& response_array = Array::Handle();
54 response_array ^= response_obj.raw(); 55 response_array ^= response_obj.raw();
55 ASSERT(response_array.Length() == 1); 56 ASSERT(response_array.Length() == 1);
56 ExternalTypedData& response = ExternalTypedData::Handle(); 57 ExternalTypedData& response = ExternalTypedData::Handle();
57 response ^= response_array.At(0); 58 response ^= response_array.At(0);
58 _msg = strdup(reinterpret_cast<char*>(response.DataAddr(0))); 59 _msg = strdup(reinterpret_cast<char*>(response.DataAddr(0)));
59 } 60 }
60 61
62 delete message;
63
61 return kOK; 64 return kOK;
62 } 65 }
63 66
64 const char* msg() const { return _msg; } 67 const char* msg() const { return _msg; }
65 68
66 virtual Isolate* isolate() const { return Isolate::Current(); } 69 virtual Isolate* isolate() const { return Isolate::Current(); }
67 70
68 private: 71 private:
69 char* _msg; 72 char* _msg;
70 }; 73 };
(...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); 789 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage());
787 // Expect error. 790 // Expect error.
788 EXPECT_SUBSTRING("\"error\"", handler.msg()); 791 EXPECT_SUBSTRING("\"error\"", handler.msg());
789 } 792 }
790 793
791 #endif // !defined(TARGET_ARCH_ARM64) 794 #endif // !defined(TARGET_ARCH_ARM64)
792 795
793 #endif // !PRODUCT 796 #endif // !PRODUCT
794 797
795 } // namespace dart 798 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/tests/vm/vm.status ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698