diff --git a/RTCP/IONProc/src/BGL_Personality.cc b/RTCP/IONProc/src/BGL_Personality.cc index 4603c56d188f177aa32560da94dc21f5903a3f87..a59bf4d72eaf20ce1d6f923ded30bb68e3f320c4 100644 --- a/RTCP/IONProc/src/BGL_Personality.cc +++ b/RTCP/IONProc/src/BGL_Personality.cc @@ -26,6 +26,7 @@ #include <BGL_Personality.h> #include <Common/SystemCallException.h> #include <Thread/Mutex.h> +#include <Thread/Cancellation.h> #include <cstdio> #include <cstdlib> @@ -51,19 +52,18 @@ struct BGLPersonality *getBGLpersonality() if (!initialized) { initialized = true; + ScopedDelayCancellation dc; // don't leak open file descriptors + int fd; - if ((fd = open("/proc/personality", O_RDONLY)) < 0) { + if ((fd = open("/proc/personality", O_RDONLY)) < 0) throw SystemCallException("open /proc/personality", errno, THROW_ARGS); - } - if (read(fd, &BGLPersonality, sizeof BGLPersonality) < 0) { + if (read(fd, &BGLPersonality, sizeof BGLPersonality) < 0) throw SystemCallException("read /proc/personality", errno, THROW_ARGS); - } - if (close(fd) < 0) { + if (close(fd) < 0) throw SystemCallException("close /proc/personality", errno, THROW_ARGS); - } } return &BGLPersonality;