5.8. 컴파일러 및 개발 도구
glibc
getenv
함수는 제한된 형태의 스레드 안전성을 제공합니다.
glibc
getenv
함수는 스레드로부터 안전하지 않습니다. 이전 버전에서는 애플리케이션이 여전히 함수 getenv
,setenv
,unsetenv
,putenv
, clearenv
를 동시에 호출하면 애플리케이션이 예기치 않게 종료되거나 getenv
가 잘못된 값을 반환할 수 있었습니다. 이 버그 수정을 통해 getenv
함수는 제한된 형식의 스레드 안전성을 제공합니다. 결과적으로 함수를 동시에 호출하면 애플리케이션이 더 이상 충돌하지 않습니다. 또한 getenv
는 setenv
를 사용하거나 프로그램을 시작할 때 존재했던 환경 값만 반환하고, 정렬되지 않은 unsetenv
호출이 있는 경우에만 설정된 환경 변수를 설정되지 않은 것으로 보고합니다.
이 수정은 environ
배열을 직접 수정하는 경우에는 적용되지 않습니다.
이제 pcp
패키지에서 /var/lib/pcp/config/pmie/config.default
파일에 대한 올바른 소유자와 그룹을 설정합니다.
이전 버전에서는 pcp
패키지를 처음 설치한 경우 패키지 설치 프로세스에서 /var/lib/pcp/config/pmie/config.default
파일의 소유권을 root:root
로 잘못 설정했습니다. 결과적으로 이 서비스에서 실행하는
유틸리티에 이 파일에 대한 pmie
confpcp:pcp
소유권이 필요하므로 pmie 서비스를 시작하지 못했습니다. 서비스가 시작되지 않으면 /var/log/pcp/pmie/pmie_check.log
파일에 다음 오류가 기록되었습니다.
Warning: no write access to pmieconf file "/var/lib/pcp/config/pmie/config.default", skip reconfiguration
Warning: no write access to pmieconf file "/var/lib/pcp/config/pmie/config.default", skip reconfiguration
이번 업데이트를 통해 pcp
패키지는 첫 번째 설치 중에 /var/lib/pcp/config/pmie/config.default
파일에 대한 올바른 소유권을 설정하고 기존 설치에서 수정합니다. 결과적으로 pmie
서비스가 올바르게 시작됩니다.
PCP-xsos
는 시스템에 대한 빠른 요약을 제공합니다.
PCP(Performance Co- Cryostat) 툴킷의 구성 가능한 많은 구성 요소는 시스템 성능을 이해하기 위해 여러 가지 툴을 사용하는 경우가 많습니다. 이러한 툴의 대부분은 압축된 대규모 시계열 데이터 볼륨을 사용할 때 추가 처리 시간이 필요합니다. 이번 개선된 기능에는 pcp-xsos
유틸리티가 PCP에 추가되었습니다. 이 유틸리티는 PCP 아카이브에서 개별 시점의 빠르고 높은 수준의 분석을 수행할 수 있습니다. 결과적으로 pcp-xsos
를 사용하면 높은 수준의 성능 문제에 대한 통찰력을 얻고 대상 성능 분석 작업을 추가로 확인할 수 있습니다.
Jira:RHEL-30590[1]
iconv
인플레이스 변환으로 인해 더 이상 손상된 출력이 발생하지 않음
iconv
유틸리티는 변환된 출력을 동일한 파일에 작성할 수 있습니다. 이전에는 인플레이스 변환을 수행하고 소스 파일이 특정 크기를 초과하면 iconv
가 처리가 완료되기 전에 파일을 덮어씁니다. 그 결과 파일이 손상되었습니다. 이번 업데이트를 통해 소스 및 출력 파일이 동일한 경우 유틸리티는 임시 파일을 생성하고 변환이 완료된 후 소스 파일을 덮어씁니다. 결과적으로 인플레이스 변환으로 인해 더 이상 손상된 파일이 발생하지 않습니다.
glibc
stub 확인자 및 getaddrinfo()
API 호출의 개선 사항
이전 버전에서는 glibc
stub resolver 및 getaddrinfo()
API 호출으로 인해 다음과 같은 경우 예상 지연보다 오래 걸릴 수 있었습니다.
- 서버에 액세스할 수 없습니다.
- 서버가 쿼리를 거부했습니다.
- 쿼리가 있는 네트워크 패킷이 손실되었습니다.
이번 업데이트를 통해 실패 사례의 지연이 줄어들고 새 해결 프로그램 옵션인 RES_STRICTERR
이 추가되었습니다. 이 옵션을 사용하면 getaddrinfo()
API 호출에서 더 많은 DNS 오류를 보고합니다. 또한 구성 파일에서 옵션을 음수 접두사와 함께 사용할 수 있습니다.
Jira:RHEL-50662[1]
glibc 종료
함수가 더 이상 동시 호출에 충돌하지 않음
이전 버전에서는 exit
함수에 대한 동시 호출과 동시 < stdio.h
> 스트림 작업을 사용하여 이 함수에 대한 호출이 동기화되지 않았습니다. 결과적으로 애플리케이션이 예기치 않게 종료되고 다중 스레드 애플리케이션에서 동시 종료
함수 호출이 발생하면 데이터 스트림이 손상될 수 있었습니다. 이번 업데이트를 통해 이제 exit
이 플러시할 때 < stdio.h
> 스트림을 잠그고, exit
호출을 동시에 종료하고 quick_exit
은 하나의 호출을 선택하여 진행합니다. 결과적으로 이 시나리오에서는 애플리케이션이 더 이상 충돌하지 않습니다.
수정으로 인해 getchar
함수와 같이 < stdio.h
> 스트림에서 차단 읽기 작업을 수행하거나 flockfile
함수를 사용하는 잠긴 스트림이 있는 애플리케이션은 읽기 작업이 반환되거나 잠금이 해제될 때까지 종료할 수 없습니다. 이러한 차단은 POSIX 표준에 필요합니다.
Jira:RHEL-65358[1]
waiting 스레드를 제거하기 위해 glibc
에서 POSIX 스레드의 구현이 향상되었습니다.
이전에는 POSIX 스레드 조건 변수 구현의 결함으로 인해 pthread_signal()
API 호출이 대기 중인 스레드가 발생하지 않을 수 있었습니다. 결과적으로 스레드는 다음 신호 또는 브로드캐스트를 무기한 대기할 수 있었습니다. 이 버그 수정을 통해 POSIX 스레드 조건 변수의 구현에는 이제 누락된 신호 조건을 방지하고 대기 중인 스레드가 올바르게 워진 것을 보장하는 시퀀스 관련 알고리즘이 포함됩니다.
Boost.Asio
는 이동된 TCP 소켓을 재사용할 때 더 이상 예외를 표시하지 않음
이전에는 애플리케이션이 Boost.Asio
라이브러리를 사용하여 이동된 TCP 소켓을 재사용하면 애플리케이션이 bad_executor
예외로 실패했습니다. 이번 업데이트에서는 문제가 해결되어 설명된 시나리오에서 Boost.Asio
라이브러리가 더 이상 실패하지 않습니다.
Jira:RHEL-67973[1]