--- 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();
}