Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
C++アップデート

C++Builder 10.3.3スレッドとTLSパッチ

C++Builderでスレッド(std :: threadなど)を作成するアプリケーションをWindows 64-bit向けにビルドすると、一部のWin64マシンにおいてアクセス違反が発生するスレッドローカルストレージの問題を修正するパッチをリリースしました。

このパッチはQuality Portalで報告された次の問題を解決します。

RSP-27180 64-bit builds crash with threads

この問題はC/C++ RTLのアセンブリコード内でWin64 32バイトのshadow spaceを設定してTLS(スレッドローカルストレージ)データをクリーンアップする際に生じたエラーと、HeapFreeメソッドの呼び出しに対して末尾呼び出し最適化(tail-call optimization)を適用するコンパイラとの組み合わせにより発生します。

言い換えると、bcc64コンパイラによって最適化されたHeapFreeの呼び出し元で、shadow spaceを誤って設定するコードが適用されていたことによって、
異なるWindowsビルドに依存する一部のマシンでは、HeapFreeはshadow spaceを使用するため、TLSをクリーンアップする際にアクセス違反が発生しました。

このパッチでは、呼び出し元でshadow spaceを正しく設定し、アクセス違反が発生しなくなるように修正しております。

なお、このケースはbcc64コンパイラ固有の問題で、bcc32/bcc32cなどの32ビットコンパイラを利用してビルドしたアプリケーションに対しては、パッチの適用の有無によらず関わらず、特に影響はありません。

パッチはこちらから入手できます。
https://cc.embarcadero.com/item/30909

パッチの適用手順は、以下の通りです

  1. RAD Studioを終了します。
  2. RAD Studioのメインフォルダ(通常はC:\Program Files (x86)\Embarcadero\Studio\20.0)より以下のファイルをバックアップします。
    ・lib\win64\debug\c0d64.o
    ・lib\win64\debug\c0fmx64.o
    ・lib\win64\debug\c0pkg64.o
    ・lib\win64\debug\c0w64.o
    ・lib\win64\debug\c0x64.o
    ・lib\win64\release\c0d64.o
    ・lib\win64\release\c0fmx64.o
    ・lib\win64\release\c0pkg64.o
    ・lib\win64\release\c0w64.o
    ・lib\win64\release\c0x64.o
    ・source\cpprtl\Source\startup\c0nt64.nasm
    ・bin64\cc64260.dll
    ・bin64\cc64260.map
    ・bin64\cc64260mt.dll
    ・bin64\cc64260mt.map
  3. ダウンロードした CB1033_TLS_Library_Patch.zip ファイルを解凍します。
  4. 展開されたファイルセットをRAD Studioのメインフォルダに上書きコピーします。
  5. RAD Studioを起動します。

※Delphi / C++Builder / RAD Studio 10.3.3 向けのパッチはリリース順に適用する必要があります。

リリース済みのパッチリストは下記記事をお読みください。
RAD Studio / Delphi / C++Builder 10.3.3 パッチリスト

Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

関連記事
DelphiRAD Studio

Windows、モバイル、Web向けの壮大なダッシュボードを簡単に視覚化するには?

C++DelphiRAD Studio

GetItパッケージのインストールを自動化する「AutoGetIt」

C++DelphiRAD Studio

RAD Studio 10.4/10.4.1からGetItを利用して10.4.2をダウンロードし、インストールする方法

C++DelphiRAD Studio

TEdgeBrowserを使用してスクリプトを実行する方法

コメント

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

IN THE ARTICLES