Lion で X11 が死ぬ問題の解決法
Lion に移行してから、ROOT で script を複数回走らせると X11 が凍るというか死ぬ問題が発生するようになりました。RootTalk の情報では、これは ROOT の bug ではなく (Apple の) X11 の bug だそうです。同じ thread に解決方法も載っているので、Lion + ROOT を使っている人は回避策を実行しておいたほうが吉。
再現するのも簡単で、以下の通りやれば X11 が反応しなくなります (cmd + opt + esc をやると、"Not Responding" になる)。
void bugx11() { TCanvas *c1 = new TCanvas(); TCanvas *c2 = new TCanvas(); c2->Divide(1,2); TH1D * h1 = new TH1D("h1","h1",100,0,1); h1->Draw(); printf(">>> Before Update\n"); gPad->Update(); printf("<<< After Update\n"); }
$ root root [1] .x bugx11.C >>> Before Update <<< After Update\ root [2] .q $ root root [1] .x bugx11.C >>> Before Update [ここで固まる]
解決方法
XQuartz 2.7.0 以上を落としてきて、install する。次に以下の command を実行 (やらなくても良い気がするんだけど、うちの環境はやらないと駄目だった)。
$ launchctl load -w /Library/LaunchAgents/org.macosforge.xquartz.startx.plist
最後に login し直して ROOT を立ち上げると、X11.app ではなく XQuartz.app が立ち上がるはずです。