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 に設定されていました。その結果、このサービスによって実行される pmieconf ユーティリティーではこのファイルの pcp: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 がシステムの迅速な概要を提供する
Performance Co-Pilot (PCP) ツールキットには多くの設定可能なコンポーネントがあるため、システムのパフォーマンスを把握するには複数の異なるツールを使用することがよくあります。これらのツールの多くは、大容量の圧縮された時系列データを扱う際に、追加の処理時間を必要とします。この機能拡張により、PCP に pcp-xsos ユーティリティーが追加されます。このユーティリティーは、PCP アーカイブから個々の時点の高速かつ高度な分析を実行できます。その結果、pcp-xsos は、高度なパフォーマンス問題の洞察を得るのに役立ち、さらにターゲットを絞ったパフォーマンス分析タスクを特定できます。
Jira:RHEL-30590[1]
iconv インプレース変換で出力が破損しなくなる
iconv ユーティリティーは、変換された出力を同じファイルに書き込むことができます。以前は、インプレース変換を実行し、ソースファイルが特定のサイズを超えると、iconv は処理が完了する前にファイルを上書きしていました。その結果、ファイルが破損していました。この更新により、ソースファイルと出力ファイルが同じ場合、ユーティリティーは一時ファイルを作成し、変換が完了した後にソースファイルをオーバーライドします。その結果、インプレース変換によってファイルが破損することはなくなりました。
glibc スタブリゾルバーと getaddrinfo() API 呼び出しの改善
以前は、glibc スタブリゾルバーと getaddrinfo() API 呼び出しにより、次の場合に予想よりも長い遅延が発生する可能性がありました。
- サーバーにアクセスできない場合
- サーバーがクエリーを拒否した場合
- クエリーを含むネットワークパケットが失われた場合
この更新により、障害発生時の遅延が短縮され、新しいリゾルバーオプション RES_STRICTERR が追加されました。このオプションを使用すると、getaddrinfo() API 呼び出しでより多くの DNS エラーが報告されます。さらに、設定ファイルで負の接頭辞 - が付いたオプションを使用できるようになりました。
Jira:RHEL-50662[1]
glibc の exit 関数が同時呼び出しでクラッシュしなくなる
以前は、exit 関数への複数の同時呼び出しと、同時 <stdio.h> ストリーム操作によるこの関数の呼び出しは同期されていませんでした。その結果、マルチスレッドアプリケーションで同時 exit 関数呼び出しが発生した場合、アプリケーションが予期せず終了し、データストリームが破損する可能性があります。この更新により、exit は <stdio.h> ストリームをフラッシュするときにそれらをロックするようになり、exit と quick_exit を同時に呼び出すと、続行するために 1 つの呼び出しが選択されます。その結果、このシナリオではアプリケーションがクラッシュしなくなりました。
この修正の結果、getchar 関数などの <stdio.h> ストリームでブロッキング読み取り操作を実行するアプリケーション、または flockfile 関数を使用するロックされたストリームを持つアプリケーションは、読み取り操作が返されるかロックが解除されるまで終了できなくなります。このようなブロッキングは POSIX 標準で必須です。
Jira:RHEL-65358[1]
待機中のスレッドを起動するための glibc の POSIX スレッド条件変数の実装が改善される
以前は、POSIX スレッド条件変数の実装に不具合があり、pthread_signal() API 呼び出しが待機中のスレッドを起動できない可能性がありました。その結果、スレッドは次のシグナルまたはブロードキャストを無期限に待機する可能性があります。このバグ修正により、POSIX スレッド条件変数の実装に、シグナル状態の欠落を回避し、待機中のスレッドが正しく起動されることをより強力に保証するシーケンス相対アルゴリズムが含まれるようになりました。
Boost.Asio は、移動された TCP ソケットを再利用するときに例外を表示しなくなる
以前は、アプリケーションが Boost.Asio ライブラリーを使用し、移動された TCP ソケットを再利用すると、アプリケーションは bad_executor 例外で失敗していました。この更新により問題が修正され、説明されているシナリオで Boost.Asio ライブラリーが失敗しなくなりました。
Jira:RHEL-67973[1]