kledgeb Ubuntuの使い方や日本語化、アプリの使い方を紹介しています。 Ubuntuの最新情報も紹介しています。

インターネットにアクセスするQtアプリがクラッシュする不具合

インターネットにアクセスするQtアプリがクラッシュする不具合が報告されています。



Qtで作られたアプリがインターネットにアクセスした後、そのアプリを終了すると、アプリ終了時にアプリがクラッシュします。


不具合報告でこの問題が発生しているアプリは「webbrowser-app」ですが、この問題は「Qt」の不具合であるため、他のQtアプリでも発生します。
ただ再現性は確実ではありません。

スタックトレース

適当なアプリで現象を再現させ「Qt Creator」でスタックトレースを見ると、以下のようになりました。
QNetworkConfiguration」クラスのデストラクタ―で問題が発生していることが分かります。


main関数のスコープを抜ける直前に「QApplication」インスタンスのデストラクタ―が呼ばれ、そこから「QNetworkConfiguration」インスタンスのデストラクタ―が呼ばれています。

この問題に対応したパッチのコメントを見ると、以下の記述があります。

+QPluginLoader hasn't unloaded in its destructor since Qt 5.0, but we
+missed the equivalent code in QFactoryLoader (which bypasses
+QPluginLoader). Besides, QPluginLoader::unload() was still doing
+unloading, which it won't anymore.
+
+Not unloading plugins is Qt's policy, as decided during the 5.0
+development process and reaffirmed now in 5.6. This is due to static
+data in plugins leaking out and remaining in use past the unloading of
+the plugin, causing crashes.
+
+This does not affect QLibrary and QLibrary::unload(). Those are meant
+for non-Qt loadable modules, so unloading them may be safe.

Qt 5.0の開発過程でプラグインのアンロードは行わない方針になったが、その方針に追従していない処理が原因であるとのことです。

Ubuntu 17.04では対応済み

現在開発中の「Ubuntu 17.04」では、この不具合に対応した「Qt」がリリースされています。


関連コンテンツ
同一カテゴリーの記事
コメント
オプション