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
服务无法启动,因为此服务执行的 pmieconf
工具对此文件需要 pcp:pcp
所有权。当服务无法启动时,它会在 /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
提供系统的快速摘要
Performance Co-Pilot (PCP)工具包中大量的可配置的组件意味着您通常使用几个不同的工具来了解系统性能。当您处理大型的压缩时间序列数据卷时,这些工具中的很多需要额外的处理时间。这个增强在 PCP 中添加了 pcp-xsos
工具。这个工具可以对 PCP 归档中的单个时间点执行快速、高级的分析。因此,pcp-xsos
可帮助您深入了解高级的性能问题,并确定进一步的目标性能分析任务。
Jira:RHEL-30590[1]
iconv
原位转换不再导致输出损坏
iconv
工具可以将转换的输出写到同一文件中。在以前的版本中,当执行一个原位转换且源文件超过特定大小时,iconv
会在处理完成之前覆盖该文件。因此,文件损坏了。有了此更新,如果源文件和输出文件是同一个文件,工具会创建一个临时文件,并在转换完成后覆盖源文件。因此,原位升级转换不再导致文件损坏。
glibc
stub 解析器和 getaddrinfo()
API 调用中的改进
在以前的版本中,glibc
stub 解析器和 getaddrinfo()
API 调用可能会在以下情况中导致比预期长的延迟:
- 服务器无法访问。
- 服务器拒绝查询。
- 带查询的网络数据包丢失。
有了此更新,失败情况下的延迟减少了,并添加了一个新的解析器选项 RES_STRICTERR
。使用此选项时,getaddrinfo()
API 调用报告更多的 DNS 错误。另外,您现在可以在配置文件中使用带有 -
负前缀的选项。
Jira:RHEL-50662[1]
glibc exit
函数不再在同时调用时崩溃
在以前的版本中,对 exit
函数的同时调用和使用同时 <stdio.h>
流操作调用这个函数不同步。因此,如果在多线程应用程序中发生并发 exit
函数调用,应用程序可能会意外终止,数据流可能会被破坏。有了此更新,在清除它们时 exit
会锁住 <stdio.h>
流,同时调用 exit
,并且 fast_exit
选择一个调用继续。因此,在这种情况下应用程序不再崩溃。
作为修复的结果,对 <stdio.h>
流执行阻止读操作的应用程序,如 getchar
函数,或者有一个使用 flockfile
函数的锁住的流无法退出,直到读操作返回或锁被释放为止。POSIX 标准需要此类阻止。
Jira:RHEL-65358[1]
在 glibc
中实现 POSIX 线程条件变量以唤醒等待的线程得到了改善
在以前的版本中,POSIX 线程条件变量实现中的一个缺陷可能会允许 pthread_signal()
API 调用无法唤醒等待的线程。因此,线程可能会无限期等待下一个信号或广播。有了此 bug 修复,POSIX 线程条件变量的实现现在包含一个相对于序列的算法,以避免丢失的信号条件,并为正确唤醒等待的线程提供更强的保障。
在重新使用删除的 TCP 套接字时,Boost.Asio
不再显示异常
在以前的版本中,如果应用程序使用 Boost.Asio
库并重复使用一个删除的 TCP 套接字,应用程序会失败并显示 bad_executor
异常。此更新修复了这个问题,Boost.Asio
库不再在上述场景中失败。
Jira:RHEL-67973[1]