--- a/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp Wed Feb 05 21:24:29 2014 -0800
+++ b/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp Thu Feb 06 14:28:35 2014 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -431,10 +431,12 @@
RESTARTABLE(::read(fd, addr, remaining), result);
if (result == OS_ERR) {
+ ::close(fd);
THROW_MSG_0(vmSymbols::java_io_IOException(), "Read error");
+ } else {
+ remaining-=result;
+ addr+=result;
}
- remaining-=result;
- addr+=result;
}
::close(fd);
@@ -906,8 +908,16 @@
FREE_C_HEAP_ARRAY(char, filename, mtInternal);
// open the shared memory file for the give vmid
- fd = open_sharedmem_file(rfilename, file_flags, CHECK);
- assert(fd != OS_ERR, "unexpected value");
+ fd = open_sharedmem_file(rfilename, file_flags, THREAD);
+
+ if (fd == OS_ERR) {
+ return;
+ }
+
+ if (HAS_PENDING_EXCEPTION) {
+ ::close(fd);
+ return;
+ }
if (*sizep == 0) {
size = sharedmem_filesize(fd, CHECK);