8303937: Corrupted heap dumps due to missing retries for os::write()
Reviewed-by: clanger
Backport-of: bf16b5b9880eb89b283006db090dce4346aa877b
diff --git a/src/hotspot/share/services/heapDumperCompression.cpp b/src/hotspot/share/services/heapDumperCompression.cpp
index 96cbf7e..be9a5da 100644
--- a/src/hotspot/share/services/heapDumperCompression.cpp
+++ b/src/hotspot/share/services/heapDumperCompression.cpp
@@ -53,10 +53,14 @@
assert(_fd >= 0, "Must be open");
assert(size > 0, "Must write at least one byte");
- ssize_t n = (ssize_t) os::write(_fd, buf, (uint) size);
+ while (size > 0) {
+ ssize_t n = os::write(_fd, buf, (uint) size);
+ if (n <= 0) {
+ return os::strerror(errno);
+ }
- if (n <= 0) {
- return os::strerror(errno);
+ buf += n;
+ size -= n;
}
return NULL;