Mercurial > hg > graal-jvmci-8
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) { |