aboutsummaryrefslogtreecommitdiff
path: root/src/os/solaris/vm/perfMemory_solaris.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/os/solaris/vm/perfMemory_solaris.cpp')
-rw-r--r--src/os/solaris/vm/perfMemory_solaris.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/os/solaris/vm/perfMemory_solaris.cpp b/src/os/solaris/vm/perfMemory_solaris.cpp
index e7b31ac64..1fa30012d 100644
--- a/src/os/solaris/vm/perfMemory_solaris.cpp
+++ b/src/os/solaris/vm/perfMemory_solaris.cpp
@@ -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 @@ static char* get_user_name(int vmid, TRAPS) {
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 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor
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);