On Apr 23, 2014, at 6:38 PM, Paul Hargrove <[email protected]> wrote:
> -Paul [Who always does what the late W. Richard Stevens says to.]
You make a good point, sir. How about this?
diff --git a/src/topology-linux.c b/src/topology-linux.c
index 25fb465..c9dc7e2 100644
--- a/src/topology-linux.c
+++ b/src/topology-linux.c
@@ -4568,7 +4568,7 @@ hwloc_linux_component_instantiate(struct hwloc_disc_compon
struct hwloc_backend *backend;
struct hwloc_linux_backend_data_s *data;
const char * fsroot_path = _data1;
- int root = -1;
+ int flags, root = -1;
backend = hwloc_backend_alloc(component);
if (!backend)
@@ -4602,8 +4602,11 @@ hwloc_linux_component_instantiate(struct hwloc_disc_compo
}
/* Since this fd stays open after hwloc returns, mark it as
- close-on-exec so that children don't inherit it */
- if (fcntl(root, F_SETFD, FD_CLOEXEC) == -1) {
+ close-on-exec so that children don't inherit it. Stevens says
+ that we should GETFD before we SETFD, so we do. */
+ flags = fcntl(root, F_GETFD, 0);
+ if (-1 == flags ||
+ -1 == fcntl(root, F_SETFD, FD_CLOEXEC | flags)) {
close(root);
root = -1;
goto out_with_data;
--
Jeff Squyres
[email protected]
For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/