2013-10-15 8 views
5

lua 5.1マニュアルによれば、lua_xmoveは、同じLua状態に属する異なるスレッドのスタック間で値を移動します。しかし、私は誤ってそれを使用して、異なるLua州間で値を移動させてしまい、うまく動作していたようです。 1つのLUA状態から別のLUA状態に値を移動する他のAPIがありますか(5.1の場合)、またはlua_xmoveを使用できますか?異なるlua状態間のlua_xmove

+1

一つは、Luaは異なるスレッド上で異なる 'LuaのStates'間でのオブジェクトのコピー/移動します/ a/9573063/1150918 – Kamiccolo

+1

私は* LuaLanes *コードをgrok'dし、ある状態から別の状態へのコピーオーバーを行っているコードを見ています。ありがとう。 – vyom

答えて

5

Luaはガベージコレクションデータをグローバル状態で格納します。したがって、GCまたは文字列オブジェクトを状態間で移動すると、ガベージコレクタを混乱させる可能性があり、ダングリングリファレンスを作成する可能性があります。

したがって、動作しているように見えるかもしれませんが、後で問題が発生する可能性があります。

参考までに、この正確な問題については、開発者がthis mailing list threadを参照してください。 lua_xmoveは、グローバル状態が同じであることを確認しないことを

注: http://stackoverflow.com:方法の

api_check(from, G(from) == G(to)); 
+2

'api_check'はコンパイル時のオプションに基づいて動作を変更することに注意してください。マニュアルの第3章(5.2章のch 4)とluaconf.hを参照してください。私は、通常のリリースのLuaがAPIチェックを有効にしないと信じています。 – RBerteig

+0

apiチェックの目的は明瞭で、「from」は「to」と等しくなければなりません。 – doug65536

+1

何ですか?いいえ、「from」は「to」と同じであってはなりません。真であるのは、状態ツリー内の 'lua_newstate()'呼び出しに起因するグローバル状態が両方の引数で同じでなければならないということです。つまり、 'to'と' from'の両方が(おそらく空の) 'lua_newthread()'の一連の呼び出しは、いくつかの初期状態 'L'に根ざしています。 – BadZen

関連する問題