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

Unified Diff: tools/ddbg.dart

Issue 10515015: Fix handling of long JSON messages (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/bin/dbg_connection.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/ddbg.dart
===================================================================
--- tools/ddbg.dart (revision 8261)
+++ tools/ddbg.dart (working copy)
@@ -11,6 +11,7 @@
Map<int, Completer> outstandingCommands;
Socket vmSock;
+String vmData;
OutputStream vmStream;
int seqNum = 0;
@@ -316,31 +317,34 @@
}
-// TODO(hausner): Need to handle the case where we receive only a partial
-// message from the debugger, e.g. when the message is too big to fit in
-// one network packet.
-void processVmData(String s) {
+void processVmData(String data) {
final printMessages = false;
- int msg_len = JSON.length(s);
+ if (vmData == null || vmData.length == 0) {
+ vmData = data;
+ } else {
+ vmData = vmData.concat(data);
+ }
+ int msg_len = JSON.length(vmData);
if (printMessages && msg_len == 0) {
- print("vm sent illegal or partial json message '$s'");
- quitShell();
+ print("have partial or illegal json message"
+ " of ${vmData.length} chars:\n'$vmData'");
return;
}
- while (msg_len > 0 && msg_len <= s.length) {
- if (msg_len == s.length) {
- if (printMessages) { print("message: $s"); }
- processVmMessage(s);
+ while (msg_len > 0 && msg_len <= vmData.length) {
+ if (msg_len == vmData.length) {
+ if (printMessages) { print("have one full message:\n$vmData"); }
+ processVmMessage(vmData);
+ vmData = null;
return;
}
- if (printMessages) { print("at least one message: '$s'"); }
- var msg = s.substring(0, msg_len);
+ if (printMessages) { print("at least one message: '$vmData'"); }
+ var msg = vmData.substring(0, msg_len);
if (printMessages) { print("first message: $msg"); }
processVmMessage(msg);
- s = s.substring(msg_len);
- msg_len = JSON.length(s);
+ vmData = vmData.substring(msg_len);
+ msg_len = JSON.length(vmData);
}
- if (printMessages) { print("leftover vm data '$s'"); }
+ if (printMessages) { print("leftover vm data '$vmData'"); }
}
« no previous file with comments | « runtime/bin/dbg_connection.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698