hotspot/src/share/vm/utilities/ostream.cpp
changeset 1383 3a216aa862b7
parent 1374 4c24294029a9
parent 768 d0bebc7eefc2
child 1388 3677f5f3d66b
--- a/hotspot/src/share/vm/utilities/ostream.cpp	Mon Jun 30 17:04:59 2008 -0700
+++ b/hotspot/src/share/vm/utilities/ostream.cpp	Tue Jul 01 11:59:44 2008 -0700
@@ -764,21 +764,28 @@
   write(str, len);
 }
 
-bufferedStream::bufferedStream(size_t initial_size) : outputStream() {
+bufferedStream::bufferedStream(size_t initial_size, size_t bufmax) : outputStream() {
   buffer_length = initial_size;
   buffer        = NEW_C_HEAP_ARRAY(char, buffer_length);
   buffer_pos    = 0;
   buffer_fixed  = false;
+  buffer_max    = bufmax;
 }
 
-bufferedStream::bufferedStream(char* fixed_buffer, size_t fixed_buffer_size) : outputStream() {
+bufferedStream::bufferedStream(char* fixed_buffer, size_t fixed_buffer_size, size_t bufmax) : outputStream() {
   buffer_length = fixed_buffer_size;
   buffer        = fixed_buffer;
   buffer_pos    = 0;
   buffer_fixed  = true;
+  buffer_max    = bufmax;
 }
 
 void bufferedStream::write(const char* s, size_t len) {
+
+  if(buffer_pos + len > buffer_max) {
+    flush();
+  }
+
   size_t end = buffer_pos + len;
   if (end >= buffer_length) {
     if (buffer_fixed) {
@@ -822,7 +829,7 @@
 #endif
 
 // Network access
-networkStream::networkStream() {
+networkStream::networkStream() : bufferedStream(1024*10, 1024*10) {
 
   _socket = -1;
 
@@ -842,7 +849,9 @@
 
 void networkStream::flush() {
   if (size() != 0) {
-    hpi::send(_socket, (char *)base(), (int)size(), 0);
+    int result = hpi::raw_send(_socket, (char *)base(), (int)size(), 0);
+    assert(result != -1, "connection error");
+    assert(result == (int)size(), "didn't send enough data");
   }
   reset();
 }