読者です 読者をやめる 読者になる 読者になる

Ubuntu11.10で Diaのレイヤウインドウが使えない問題

dia ubuntu

Bug #892815 “[Oneiric] Layers support is completely broken in Di...” : Bugs : dia package : Ubuntu


ここにある通りなんですが、単に壊れているとか使えないとかじゃなく
CPU使用率もやたらと増えるのでその観点で少し調べてみた。

gdbでアタッチして backtraceを取得

  % sudo gdb
  > (gdb) attach (diaのプロセスID)
  > (gdb) bt
     #0  0x00007fa7e378cf88 in g_hash_table_lookup ()
        from /lib/x86_64-linux-gnu/libglib-2.0.so.0
     #1  0x00007fa7e3c70b9d in g_param_spec_pool_lookup ()
        from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
     #2  0x00007fa7e4d6e74a in gtk_widget_style_get_valist ()
        from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
     #3  0x00007fa7e4d6ea37 in gtk_widget_style_get ()
        from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
     #4  0x00007fa7e4d6eab8 in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
     #5  0x00007fa7e4d6ec2b in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
     #6  0x00007fa7e4b9b92b in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
     #7  0x00007fa7e4d6eb15 in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
     #8  0x00007fa7e4d6eb90 in gtk_widget_region_intersect ()
        from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
     #9  0x00007fa7e4bd16b4 in gtk_container_propagate_expose ()
        from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
     #10 0x00007fa7e4bd02c4 in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
     #11 0x00007fa7e4dc4265 in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
     #12 0x00007fa7e4c4e828 in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
     #13 0x00007fa7e3c640a4 in g_closure_invoke ()
        from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
     #14 0x00007fa7e3c75e5f in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
     #15 0x00007fa7e3c7f483 in g_signal_emit_valist ()
        from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
     #16 0x00007fa7e3c7f852 in g_signal_emit ()
        from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
     #17 0x00007fa7e4d68dc1 in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
     #18 0x00007fa7e4c4d080 in gtk_main_do_event ()
        from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
     #19 0x00007fa7e48a8704 in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
     #20 0x00007fa7e48a86b3 in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
     #21 0x00007fa7e48a86b3 in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
     #22 0x00007fa7e48a86b3 in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
     #23 0x00007fa7e48a86b3 in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
     #24 0x00007fa7e48a86b3 in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
     #25 0x00007fa7e48a3633 in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
     #26 0x00007fa7e48a57d1 in gdk_window_process_all_updates ()
        from /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
     #27 0x00007fa7e48a5839 in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
     #28 0x00007fa7e4882d26 in ?? ()
        from /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
     #29 0x00007fa7e379ea5d in g_main_context_dispatch ()
        from /lib/x86_64-linux-gnu/libglib-2.0.so.0
     #30 0x00007fa7e379f258 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
     #31 0x00007fa7e379f792 in g_main_loop_run ()
        from /lib/x86_64-linux-gnu/libglib-2.0.so.0
     #32 0x00007fa7e4c4bdb7 in gtk_main ()
        from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
     #33 0x000000000041b975 in main ()

perf topでの結果

Linuxに付属するツール perfを利用して見てみました。
こちらがとても参考になりました。

  % sudo perl top

結果


psやら, タスクマネージャ的なソフトで見ると CPU利用率は結構高いけど、
これだとあんまり高くないですね。しばらく回してみたんですが、同じところで
ぐるぐる回っているということではないということなんですかね。
でもやっぱり glib周りかな怪しいのは。


Ubuntu以外では使えているそうなので、Ubuntuの問題なんじゃないか
っていうのが出ていますが、どうなんですかね?dia自体はある程度
完成されており、開発がガンガン行われているわけでもないので、
やっぱりほかとの兼ね合いなんでしょうね。


これ以上はソースを見ていくしかないのかな。
レイヤ機能は使えても、レイヤウインドウで操作ができないという
のは辛すぎるので、早く解決してほしい問題です。