このページは過去に掲載していたものをそのまま使用しています。
池田さんという方から、XIMに関係してSEGVして しまうという問題点と解決法のメールを頂きました。ここで紹介して パッチをdia-0.84-7-8.diffとして 公開する事にします。
問題点の指摘と対処方法を富士インフォックス・ネット(株)システム開発部の 池田さんがメールで連絡してくれました。以下のページでメールの内容をほぼ全部 引用する形でレポートを紹介しています。 [ 池田さんのメールを元にしたページ ]
池田さんのメールによると (詳くは前出の別ページを見てください)
canvas を開く際、 XIC が初期化されないまま gdk_im_begin() に渡されたため、 SEGV が発生した。とのことでした。この原因はXIC(GdkIC)の初期化前にgdk_im_begin()が呼ばれる点に あったようです。
原因がGdkICの初期化にあったので、解決するにはこの初期化をする場所を 適切なものに変更すれば良いようです。そこで初期化のコードの位置を create_display_shell()関数の前に移動しました。
個人的にはこちらの方がうれしかったのですが、池田さんが今回の障害とは 直接関係なかったのですがgdk_im_end()を組込んでくれました。
/* in disp_callback.c */ case GDK_FOCUS_CHANGE: #ifdef USE_XIM if(((GdkEventFocus *)event)->in) { if(ddisp->ic == NULL) create_input_dialog (ddisp); else gdk_im_begin(ddisp->ic, ddisp->canvas->window); } else { gdk_im_end(); } #endif
実際のところ私の環境では、具体的な障害の例を見ることができなかった のですが、どなたか「私のこの環境では落ちた」などの障害に遭遇したら、状況と 環境を書いた簡単なメールをください。今回の変更の影響の範囲を知りたいので よろしくお願いします。