3/18/2012

[note] Launchyが落ちるので暫定修正

私は普段からメインPCとノートPC一台にUbuntuを使っているんですけれども、最近何故かノートPCの方でランチャーとして入れているLaunchyが落ちるようになってしまったんですね。落ちるタイミングは入力中、候補を列挙する途中で、複数の決まったアプリが候補に挙がると必ず落ちるというもので、全く使い物にならないんです。Ubuntuのバージョンは最新の11.10の32bit版ですが、64bit版のメインPCは問題ない事からして、どこかのライブラリとの不整合関係のバグだと思うんですけど。64bit版の方が安定してるってのも隔世の感がありますね。ともあれこのままでは困るので簡単な原因調査を行った上で暫定措置を取ってみた次第です。内容は以下の通り。

1.原因調査(概要)
 Launchyのver.2.5のソースを辿って、iconの読み出しを行うスレッド中で落ちている事を確認。具体的にはIconExtractorクラス内で各アイテムをCatItemに読み込んでいる所。要するにアイコンデータの読み込みに失敗する場合があって、その際のエラーハンドリングにも不備があり、それによって落ちているものと推定。

2.暫定措置
 上記を受けて、アイコンデータの読み込み部の修正を検討してみると、スレッドも絡んでそれなりに面倒な感じ。そもそも本アプリの、QPixmapをスレッドを跨いで使う事自体があまりよろしくない話であるらしい事も鑑みて読み込みの修正は諦め、アイコン読み込み自体を無効にする事に決定。だってほらアイコン表示されなくても何の問題もない、というかむしろすっきりするし。ソースの修正点は以下の通り。main.cpp中の6ヶ所、iconExtractor絡みの行を無効にします。必要十分かどうかや副作用等諸々未検証につき、参考にされる場合は自己責任ということでよろしく。もっともubuntuでlaunchyを常用してる人なんてそんなにいないでしょうけど。

[ソース修正点: src/main.cpp]
L98 : connect(&iconExtractor, SIGNAL(iconExtracted(int, QIcon)), this, SLOT(iconExtracted(int, QIcon)));
L385: iconExtractor.processIcons(searchResults);
L425: iconExtractor.stop();
L525: iconExtractor.processIcon(item);
L543: iconExtractor.processIcon(item);
L900: iconExtractor.processIcon(searchResults[0]);

修正出来たらmake、install。当然アイコンは表示されないけれども、とりあえず落ちないようにはなって一安心です。しかし公式に対応頂くのが望ましいところですね。