もう少しな気がするんです
おはようございます。
結局、この週末もcrosswalkと格闘でした。 惨敗ですけどね。
しかも、金曜にボーリング からの 飲み会で、 腕は痛いは、頭は痛いはで、結局土曜日は半日ぐらいぶっ倒れてましたから、 あまり進んでないんですよね・・・。
肉体は、強制的にHybernation(というか、Halt?)させたので、 休息にはなったかも?ということで良しとします。
で、本題ですが、 crosswalk for tegra Ubuntuは、ビルドが通ったんですけど、結局動かず。 Tizen と同じところでこけてる感じです。
Tizen の方は、Abortがかかっている箇所の意図が意味不明だったので、 とりあえず、コメントアウトしたら、先に進んで、セグりました。 (SIGSEGV=セグるって、方言なのかな)
void IMEStateChangeHandler::SetInstance(IMEStateChangeHandler* impl) { CHECK(!impl_) << "Replacing set IMEStateChangeHandler implementation."; impl_ = impl; }
↑この、CHECKマクロが意味不明で、引数がfalseだと、Abortします。 しかし、メンバ変数implは初期値NULLなので、最初にSetInstanceした時点で、Abortするんです。 がついているのが間違いかと(引数のチェックをするつもりかと)おもって、修正してみたら、 もっと早いタイミングでAbort。
・・・意味がわかりません!
何なんでしょうか、Intel版ではここでAbortで止まったなんてことはないので、 ここに処理がきた時点でアウトなんでしょうか。 後で何か問題があるかもしれませんが、そんなことは未来の私が何とかするので、良しとします。
ということで、とりあえず外してみたら、以下の箇所でセグりました。
void WaylandWindow::RealizeAcceleratedWidget() { if (!shell_surface_) { LOG(ERROR) << "Shell type not set. Setting it to TopLevel"; SetShellAttributes(TOPLEVEL); } if (!window_) window_ = new EGLWindow(shell_surface_->GetWLSurface(), allocation_.width(), allocation_.height()); }
thisポインタがNULLらしいです。 メモリ破壊って訳じゃなく、
window->RealizeAcceleratedWidget();
を実行したときに、windowがNULLだった場合、 thisポインタにアクセスしたときに初めてセグるらしいですね。 初めて知りました。
pythonのselfみたいなものでしょうか。
Wayland周りまで降りてきたので、解析が進むんじゃないだろうかと思い・・・ たいですが、仕事してきます。