|
From: Kouhei S. <ko...@co...> - 2013-04-06 09:43:53
|
須藤です。
In <CAE...@ma...>
"[ruby-gnome2-devel-ja] gdk-pixbuf windows: jpgとgifを同時に使うとsegfault発生" on Sat, 6 Apr 2013 00:03:02 +0900,
myokoym <my...@gm...> wrote:
> WindowsでRuby/GTKを使っていたらSegmentation faultに出会いました。
おぉ。。。
> 調べたところ、Windowsでjpgファイルとgifファイルを同時に使うと起きるようです。
> (Linuxでは再現しませんでした。)
>
> ## 再現コード(gtk3のサンプルファイルを使用)
>
> require 'gtk3'
> Gdk::Pixbuf.new("background.jpg")
> Gdk::Pixbuf.new("gtk-logo-rgb.gif")
>
> ## メッセージ
>
> C:\work\ruby-gnome2-master\gtk3\sample\gtk-demo>ruby jpg-and-gif-together.rb
> jpg-and-gif-together.rb: line 3
> GLib-GObject-WARNING **:cannot register existing type `GdkPixbufGdipAnim'
> jpg-and-gif-together.rb: line 3
> GLib-CRITICAL **:g_once_init_leave: assertion `result != 0' failed
> jpg-and-gif-together.rb: line 3
> GLib-GObject-CRITICAL **:g_object_new: assertion `G_TYPE_IS_OBJECT
> (object_type)' failed
> jpg-and-gif-together.rb:3: [BUG] Segmentation fault
>
> 詳細はgistに貼ってあります。
> https://gist.github.com/myokoym/5319283
これ、require 'gdk_pixbuf2'にしても再現しますよね?
gdk-pixbufはプラグインをサポートした画像処理ライブラリなんで
すが、Windowsでは、GDI+というWindowsが提供しているAPIを使っ
て画像を読み書きしているようです。で、
GdkPixbufGdipAnim(GdipはGDI+ということ)というプラグインが2
回登録されているのがSEGVの原因のようです。
gdk-pixbufのソースをのぞいてみたんですが、GdkPixbufGdipAnim
はプラグインじゃなくてgdk-pixbufに組み込まれていました。(特
別扱い。)組み込みなのにどうして2回登録されるのかしら。。。
gdk_pixbuf2 gemの1.2.5でも同じ問題が起きるか試してもらえます
か?1.2.6からgdk-pixbufのバージョンをあげたので、もしかした
らそれが関係しているのかもしれません。1.2.5で落ちないのなら
最近の変更だけ確認すればよさそうです。
|