3

完了時にコールバックを伴う長時間実行操作を含むノードのネイティブ拡張機能を構築しています。

ノードバッファを呼び出しに渡しています。拡張機能によって処理される内容のペイロードが含まれています。

AsyncWorker のコンストラクターの永続ストレージにバッファーを格納し、後で必要になったときに取得できるようにする必要があります。

この例 (nan テスト スイートから) は、私が通常コードのベースとしているものです: https://github.com/nodejs/nan/blob/master/test/cpp/bufferworkerpersistent.cpp

このテストは機能しますが、HandleOKCallback メソッドまでバッファに対して何も実行されません。これは私にとってあまり興味深いことではありません。Execute メソッド中にバッファにアクセスする必要があります。

次のように、テストの Execute() メソッドに行を追加して、バッファにアクセスしようとすると、次のようになります。

void Execute () {
    printf("before GetFromPersistent\n");
    v8::Local<v8::Value> handle = GetFromPersistent("buffer");
    printf("after GetFromPersistent\n");
    printf("buffer @%llux len %ld\n", (uint64_t)node::Buffer::Data(handle), node::Buffer::Length(handle));
    Sleep(milliseconds);
}

GetFromPersistent 呼び出しでセグ フォールトが発生します。

私の質問は次のとおりです。何が欠けていますか? 永続オブジェクトを Execute メソッドにプルできないようにする必要がありますか? もしそうなら、なぜですか?

4

1 に答える 1