src/share/vm/utilities/ostream.cpp

changeset 657
2a1a77d3458f
parent 537
f96100ac3d12
child 670
9c2ecc2ffb12
child 786
fab5f738c515
     1.1 --- a/src/share/vm/utilities/ostream.cpp	Tue Jun 24 10:43:29 2008 -0700
     1.2 +++ b/src/share/vm/utilities/ostream.cpp	Tue Jun 24 16:00:14 2008 -0700
     1.3 @@ -753,21 +753,28 @@
     1.4    write(str, len);
     1.5  }
     1.6  
     1.7 -bufferedStream::bufferedStream(size_t initial_size) : outputStream() {
     1.8 +bufferedStream::bufferedStream(size_t initial_size, size_t bufmax) : outputStream() {
     1.9    buffer_length = initial_size;
    1.10    buffer        = NEW_C_HEAP_ARRAY(char, buffer_length);
    1.11    buffer_pos    = 0;
    1.12    buffer_fixed  = false;
    1.13 +  buffer_max    = bufmax;
    1.14  }
    1.15  
    1.16 -bufferedStream::bufferedStream(char* fixed_buffer, size_t fixed_buffer_size) : outputStream() {
    1.17 +bufferedStream::bufferedStream(char* fixed_buffer, size_t fixed_buffer_size, size_t bufmax) : outputStream() {
    1.18    buffer_length = fixed_buffer_size;
    1.19    buffer        = fixed_buffer;
    1.20    buffer_pos    = 0;
    1.21    buffer_fixed  = true;
    1.22 +  buffer_max    = bufmax;
    1.23  }
    1.24  
    1.25  void bufferedStream::write(const char* s, size_t len) {
    1.26 +
    1.27 +  if(buffer_pos + len > buffer_max) {
    1.28 +    flush();
    1.29 +  }
    1.30 +
    1.31    size_t end = buffer_pos + len;
    1.32    if (end >= buffer_length) {
    1.33      if (buffer_fixed) {
    1.34 @@ -811,7 +818,7 @@
    1.35  #endif
    1.36  
    1.37  // Network access
    1.38 -networkStream::networkStream() {
    1.39 +networkStream::networkStream() : bufferedStream(1024*10, 1024*10) {
    1.40  
    1.41    _socket = -1;
    1.42  
    1.43 @@ -831,7 +838,9 @@
    1.44  
    1.45  void networkStream::flush() {
    1.46    if (size() != 0) {
    1.47 -    hpi::send(_socket, (char *)base(), (int)size(), 0);
    1.48 +    int result = hpi::raw_send(_socket, (char *)base(), (int)size(), 0);
    1.49 +    assert(result != -1, "connection error");
    1.50 +    assert(result == (int)size(), "didn't send enough data");
    1.51    }
    1.52    reset();
    1.53  }

mercurial