完了時にコールバックを伴う長時間実行操作を含むノードのネイティブ拡張機能を構築しています。
ノードバッファを呼び出しに渡しています。拡張機能によって処理される内容のペイロードが含まれています。
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 メソッドにプルできないようにする必要がありますか? もしそうなら、なぜですか?