diff --git a/src/XrdTpc/XrdTpcNSSSupport.cc b/src/XrdTpc/XrdTpcNSSSupport.cc index ca81714e5ba..2c3a3879637 100644 --- a/src/XrdTpc/XrdTpcNSSSupport.cc +++ b/src/XrdTpc/XrdTpcNSSSupport.cc @@ -203,20 +203,21 @@ XrdTpcNSSSupport::Maintenance() return false; } - std::unique_ptr dirp(fdopendir(fddir), &closedir); + DIR *dirp = fdopendir(fddir); if (!dirp) { m_log.Emsg("XrdTpc", "Failed to allocate a directory pointer"); return false; } struct dirent *result; - while ((result = readdir(dirp.get()))) { + while ((result = readdir(dirp))) { //m_log.Emsg("Will parse file for CA certificates", result->d_name); if (result->d_type != DT_REG && result->d_type != DT_LNK) {continue;} if (result->d_name[0] == '.') {continue;} int fd = openat(fddir, result->d_name, O_RDONLY); if (fd < 0) { m_log.Emsg("XrdTpc", "Failed to open certificate file", result->d_name, strerror(errno)); + closedir(dirp); return false; } file_smart_ptr fp(fdopen(fd, "r"), &fclose); @@ -227,8 +228,10 @@ XrdTpcNSSSupport::Maintenance() } if (errno) { m_log.Emsg("XrdTpc", "Failure during readdir", strerror(errno)); + closedir(dirp); return false; } + closedir(dirp); m_next_update.store(time(NULL) + 900, std::memory_order_relaxed); m_ca_file.reset(new_file.release());