QTGraphicsExporter.SavePictureをスレッド内で使用するとアプリケーションが応答しなくなる事がある
最近QuickTimeが新しくなったせいか、既存のRbアプリでタイトルのような障害が発生する事があります。
割合深刻な問題な上、原因発見が結構困難な問題ですが、現状それらしい情報が上がっていないようなので
ここで報告しておきます。
公式の報告はまだありません。Yukiの環境に依存する問題である可能性があります。
情報をお持ちの方はコメント下さい。
障害の内容
QTGraphicsExporter.SavePictureメソッド使用後、アプリケーションが応答しなくなる
発生環境
私の環境を描いておきます:
再現性
上記の環境では、以下の条件で100%再現します:
- スレッド(Threadクラス)内でQTGraphicsExporter.SavePictureを呼ぶ
- QTGraphicsExporterがスレッド外から参照されている状態でスレッドの処理を抜ける
- QTGraphicsExporterへの参照が0になったタイミングで応答不能
要するに
スレッド内でQTGraphicsExporterを使ったあと、スレッドが先に終了*1するとダメ。
ダイアログ開いて設定を済ませた後のQTGraphicsExporterをスレッドに渡してバックグラウンドで処理する、
という使い方はわりと一般的だと思うのですが。
どうする?
QTGraphicsExporterをスレッド内で使い捨てにするのが一番安全。
スレッドにQTGraphicsExporterを渡した場合、Runする前*2に確実に全ての参照を切る実装をしないと危険です。