comparison src/os/solaris/vm/perfMemory_solaris.cpp @ 23455:9f8038f83a6e

8130910: hsperfdata file is created in wrong directory and not cleaned up if /tmp/hsperfdata_<username> has wrong permissions Summary: Add check for fchir() failure and disable shared PerfMemory in that case. Reviewed-by: dcubed, simonis, gthornbr
author clanger
date Tue, 17 Nov 2015 09:39:45 -0800
parents decf7079a7b9
children b5f3a471e646
comparison
equal deleted inserted replaced
23454:714096aec397 23455:9f8038f83a6e
1 /* 1 /*
2 * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
375 *saved_cwd_fd = -1; 375 *saved_cwd_fd = -1;
376 } else { 376 } else {
377 *saved_cwd_fd = result; 377 *saved_cwd_fd = result;
378 } 378 }
379 379
380 // Set the current directory to dirname by using the fd of the directory. 380 // Set the current directory to dirname by using the fd of the directory and
381 // handle errors, otherwise shared memory files will be created in cwd.
381 result = fchdir(fd); 382 result = fchdir(fd);
382 383 if (result == OS_ERR) {
383 return dirp; 384 if (PrintMiscellaneous && Verbose) {
385 warning("could not change to directory %s", dirname);
386 }
387 if (*saved_cwd_fd != -1) {
388 ::close(*saved_cwd_fd);
389 *saved_cwd_fd = -1;
390 }
391 // Close the directory.
392 os::closedir(dirp);
393 return NULL;
394 } else {
395 return dirp;
396 }
384 } 397 }
385 398
386 // Close the directory and restore the current working directory. 399 // Close the directory and restore the current working directory.
387 // 400 //
388 static void close_directory_secure_cwd(DIR* dirp, int saved_cwd_fd) { 401 static void close_directory_secure_cwd(DIR* dirp, int saved_cwd_fd) {