# HG changeset patch # User clanger # Date 1455875094 -3600 # Node ID eab41b48725bf7cd0abd5796e58d19e77dc96fe3 # Parent 8c94907406e1d46a534b59e5ab6b100e5240a0fa 8150232: AIX cleanup: Integrate changes of 7178026 and others diff --git a/src/os/aix/vm/attachListener_aix.cpp b/src/os/aix/vm/attachListener_aix.cpp --- a/src/os/aix/vm/attachListener_aix.cpp +++ b/src/os/aix/vm/attachListener_aix.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012, 2015 SAP SE. All rights reserved. + * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2016 SAP SE. 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 @@ -225,7 +225,7 @@ // We must call bind with the actual socketaddr length. This is obligatory for AS400. int res = ::bind(listener, (struct sockaddr*)&addr, SUN_LEN(&addr)); if (res == -1) { - RESTARTABLE(::close(listener), res); + ::close(listener); return -1; } @@ -238,7 +238,7 @@ } } if (res == -1) { - RESTARTABLE(::close(listener), res); + ::close(listener); ::unlink(initial_path); return -1; } @@ -400,7 +400,7 @@ AixAttachOperation* op = read_request(s); if (op == NULL) { int res; - RESTARTABLE(::close(s), res); + ::close(s); continue; } else { return op; @@ -452,7 +452,7 @@ } // done - RESTARTABLE(::close(this->socket()), rc); + ::close(this->socket()); // were we externally suspended while we were waiting? thread->check_and_wait_while_suspended(); diff --git a/src/os/aix/vm/perfMemory_aix.cpp b/src/os/aix/vm/perfMemory_aix.cpp --- a/src/os/aix/vm/perfMemory_aix.cpp +++ b/src/os/aix/vm/perfMemory_aix.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012, 2013 SAP SE. All rights reserved. + * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2016 SAP SE. 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 @@ -121,7 +121,7 @@ addr += result; } - RESTARTABLE(::close(fd), result); + result = ::close(fd); if (PrintMiscellaneous && Verbose) { if (result == OS_ERR) { warning("Could not close %s: %s\n", destfile, strerror(errno)); @@ -299,10 +299,13 @@ bool create; int error; int fd; + int result; create = false; - if (lstat(path, &orig_st) != 0) { + RESTARTABLE(::lstat(path, &orig_st), result); + + if (result == OS_ERR) { if (errno == ENOENT && (oflag & O_CREAT) != 0) { // File doesn't exist, but_we want to create it, add O_EXCL flag // to make sure no-one creates it (or a symlink) before us @@ -316,7 +319,7 @@ return OS_ERR; } } else { - // Lstat success, check if existing file is a link. + // lstat success, check if existing file is a link. if ((orig_st.st_mode & S_IFMT) == S_IFLNK) { // File is a symlink. errno = ELOOP; @@ -325,9 +328,9 @@ } if (use_mode == true) { - fd = open(path, oflag, mode); + RESTARTABLE(::open(path, oflag, mode), fd); } else { - fd = open(path, oflag); + RESTARTABLE(::open(path, oflag), fd); } if (fd == OS_ERR) { @@ -336,7 +339,8 @@ // Can't do inode checks on before/after if we created the file. if (create == false) { - if (fstat(fd, &new_st) != 0) { + RESTARTABLE(::fstat(fd, &new_st), result); + if (result == OS_ERR) { // Keep errno from fstat, in case close also fails. error = errno; ::close(fd); @@ -384,7 +388,7 @@ RESTARTABLE(::open(dirname, O_RDONLY|O_NOFOLLOW), result); #else // workaround (jdk6 coding) - RESTARTABLE(::open_o_nofollow(dirname, O_RDONLY), result); + result = open_o_nofollow(dirname, O_RDONLY); #endif if (result == OS_ERR) { @@ -888,7 +892,7 @@ RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_NOFOLLOW, S_IREAD|S_IWRITE), result); #else // workaround function (jdk6 code) - RESTARTABLE(::open_o_nofollow(filename, O_RDWR|O_CREAT, S_IREAD|S_IWRITE), result); + result = open_o_nofollow(filename, O_RDWR|O_CREAT, S_IREAD|S_IWRITE); #endif if (result == OS_ERR) { @@ -931,7 +935,7 @@ if (PrintMiscellaneous && Verbose) { warning("could not set shared memory file size: %s\n", strerror(errno)); } - RESTARTABLE(::close(fd), result); + ::close(fd); return -1; } @@ -951,7 +955,7 @@ #ifdef O_NOFOLLOW RESTARTABLE(::open(filename, oflags), result); #else - RESTARTABLE(::open_o_nofollow(filename, oflags), result); + open_o_nofollow(filename, oflags); #endif if (result == OS_ERR) { @@ -1006,8 +1010,7 @@ char* dirname = get_user_tmp_dir(user_name); char* filename = get_sharedmem_filename(dirname, vmid); - - // Get the short filename. + // get the short filename. char* short_filename = strrchr(filename, '/'); if (short_filename == NULL) { short_filename = filename; @@ -1033,9 +1036,7 @@ mapAddress = (char*)::mmap((char*)0, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); - // attempt to close the file - restart it if it was interrupted, - // but ignore other failures - RESTARTABLE(::close(fd), result); + result = ::close(fd); assert(result != OS_ERR, "could not close file"); if (mapAddress == MAP_FAILED) { @@ -1142,7 +1143,6 @@ // constructs for the file and the shared memory mapping. if (mode == PerfMemory::PERF_MODE_RO) { mmap_prot = PROT_READ; - // No O_NOFOLLOW defined at buildtime, and it is not documented for open. #ifdef O_NOFOLLOW file_flags = O_RDONLY | O_NOFOLLOW; @@ -1205,21 +1205,28 @@ FREE_C_HEAP_ARRAY(char, filename); // 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); - assert(size != 0, "unexpected size"); } else { size = *sizep; } + assert(size > 0, "unexpected size <= 0"); + mapAddress = (char*)::mmap((char*)0, size, mmap_prot, MAP_SHARED, fd, 0); - // attempt to close the file - restart if it gets interrupted, - // but ignore other failures - RESTARTABLE(::close(fd), result); + result = ::close(fd); assert(result != OS_ERR, "could not close file"); if (mapAddress == MAP_FAILED) { @@ -1230,7 +1237,7 @@ "Could not map PerfMemory"); } - // It does not go through os api, the operation has to record from here. + // it does not go through os api, the operation has to record from here. MemTracker::record_virtual_memory_reserve((address)mapAddress, size, CURRENT_PC, mtInternal); *addr = mapAddress; @@ -1238,7 +1245,7 @@ if (PerfTraceMemOps) { tty->print("mapped " SIZE_FORMAT " bytes for vmid %d at " - INTPTR_FORMAT "\n", size, vmid, (void*)mapAddress); + INTPTR_FORMAT "\n", size, vmid, p2i((void*)mapAddress)); } }