kiyoka.2013_02_22 RSSPLAIN

Related pages: !kiyoka.blog.list !kiyoka.blog.2013_02
553555555555555555555445555555555444433333335
5

[MacRuby][PasteHub] SEGVしない環境変数の組合せ

5

 

3

自分用メモ。あまりにも時間をかけたため、残してなかったら多分後悔するだろう。

5

 

5

PasteHubのクラウド同期処理をMacRubyで動かすと、まれに落ちる。

5

MacRubyのバージョンは次のもの。

5
 kiyoka/MacRuby at build_macruby_for_10.6_on_Lion · GitHubEXT
5

 

5

問題のコードは次のようなPure Rubyのコードだ。

5
    def fetchServerList( latestKey, auth )
5
      client = PasteHub::Client.new( auth )
5
      if latestKey.is_a? String
5
        STDERR.puts "Info: fetch one entry"
5
        list = [ latestKey ]
5
      else
5
        STDERR.puts "Info: fetch ALL entries"
5
        list = client.getList()
5
      end
5
      client.setServerFlags( list )
5
    end
5

 

4

落ちる場所は決まって、if latestKey.is_a? Stringの行だ。

4

latestKeyが参照する先の文字列オブジェクトがこっそりGCされるのか、gdbで見ると不正なアドレス参照で落ちていることがわかる。

5

 

5

MacRubyの様々な最適化オプションを外していったところ次の設定が安定することがわかった。

5
export VM_DISABLE_RBO=1
5
#export GC_DISABLE=1
5
export VM_OPT_LEVEL=0
5
export GC_DEBUG=1
5
export AUTO_USE_TLC=0
5

 

5

さて、実際にPasteHubをデプロイするとなると、GC_DEBUGは上記のままとなるが、結果はいかに。

5

 

4

追記:

4

どうやら「export AUTO_USE_TLC=0」が効いたっぽい。

4

しかし、これをまじめに追いかけてMacRuby本体を直すところまではコストが合わないなぁ。

4

 

3

XCodeの環境変数で以下を指定したら、3日使っても落ちなくなったので一件落着。

3

 

3

この画面は、XCodeのメニュー「Product」 → 「Edit Scheme...」で辿りつける。

3

 

3
 XCode_and_MacRuby_EditSchemas
3

 

3

 

5

...comment disabled...