チケット #25417

登録: 2011-06-13 17:48

最終更新: 2011-07-25 22:54

ttpmenuでGDIオブジェクトのリソースリーク

報告者:(匿名)担当者:(未割り当て)
優先度:5 - 中マイルストーン:(未割り当て)
チケットの種類:バグ重要度:5 - 中
コンポーネント:Other状況:完了
解決法修正済み

チケットの詳細

ttpmenuを利用中に、リモートデスクトップでのログオンとコンソールからの ログオンを交互に実施すると、GDIオブジェクトのリソースリークが発生します。

ExtractAssociatedIconEx()において、SHGetFileInfo()で取得したアイコンリソース を開放していないのが、原因のようです。

添付ファイル

添付ファイルリスト添付ファイルはありません
新規添付ファイル追加
添付ファイルの追加添付ファイルの追加にはログインが必要です

チケットの履歴 - 7 件中 3 件表示 [古い履歴も表示する]

2011-06-13 17:48 更新者: None

  • 新しいチケット "ttpmenuでGDIオブジェクトのリソースリーク" が作成されました

2011-06-13 20:55 更新者: maya

コメント

アプリケーション終了時にリソースを開放するようにしてみました。(アイコンのセット直前にしか開放していなかった)

http://ttssh2.sourceforge.jp/snapshot/ttpmenu.zip

再現環境がないので、これで改善されなかったらエラーの詳細を教えて頂けますか?

2011-06-24 14:32 更新者: None

コメント

maya への返信

再現環境がないので、これで改善されなかったらエラーの詳細を教えて頂けますか?

早速のご対応ありがとうございます。
試してみましたが、状況はかわりませんでした。

現象は、ttpmenuを実行しているPCにおいて、画面の解像度等を変更する
(WM_DISPLAYCHANGEを受け取る)と発生します。
WM_DISPLAYCHANGEを受け取ると、InitListMenu()が呼ばれるのですが、
この中で実行されているExtractAssociatedIconEx()において、SHGetFileInfo()
で取得したアイコンリソースを開放していないので、リソースリーク
が発生します。

2011-06-24 17:31 更新者: maya

コメント

http://sourceforge.jp/projects/ttssh2/svn/view/trunk/ttpmenu/ttpmenu.cpp?root=ttssh2&r1=4357&r2=4503

今回の修正前から、InitListMenu の中でアイコンリソースの開放をしています。今回の修正では、アプリケーション終了時にもリソースを開放するようにしました。

ExtractAssociatedIconExで取得したアイコンリソースは、トレイアイコンのExecuteメニューのサブメニューでの表示、およびList Configurationメニューを押したときのList Itemの表示に利用されているので、アプリケーションが終了するまで開放できないものと思います。

リモートデスクトップを使わず単純に画面の解像度変更をしてみましたが、こちらでは落ちることはありませんでした。

2011-06-25 00:48 更新者: None

コメント

たびたびすみません。

リモートデスクトップを使わず単純に画面の解像度変更をしてみましたが、こちらでは落ちることはありませんでした。


ttpmenuが落ちるわけではなく、GDIリソースがリークします。
タスクマネージャでGDIリソースの項目を表示して、解像度を変更すると確認できます。

ExtractAssociatedIconExの中では、SHGetFileInfo()を実行し、CopyIconでhLargeIconや
hSmallIconにアイコンをコピーしています。

本来、コピー後、sfi.hIconをDestroyIconで開放しなくてはいけないのですが、実行されていません。

2011-06-26 20:34 更新者: maya

  • 解決法なし から 修正済み に更新されました

コメント

r4512で修正しました。報告ありがとうございます

2011-07-25 22:54 更新者: maya

  • チケット完了時刻2011-07-25 22:54 に更新されました
  • 状況オープン から 完了 に更新されました

追記/更新 #25417 (ttpmenuでGDIオブジェクトのリソースリーク)

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする