On 11/07/2019 07:07 AM, bioinfornatics wrote:
> Dear,
>
> I try to use the async buffer describe into std.parallelism
> documentation but my test code core dump!

I admit I don't fully understand the lifetime issues but removing the "code smell" of the modul-level File object solved the issue for me, which requires four changes:

// (1) Comment out the module-level variable
// File file;

// ...

@system
void next(File file, ref ubyte[] buf)
{
  // (2.a) Use the parameter 'file'
  // (2.b) Adjust the length of the buffer
  //       (rawRead may read less than the requested size)
    buf = file.rawRead(buf);
}

// ...

    // (3) Define a local variable
    auto file = File(filePath, "rb");

// ...

    // (4) Use "callables" that use the local 'file':
auto asyncReader = taskPool.asyncBuf((ref ubyte[] buf) => next(file, buf),
                                         () => file.eof,
                                         bufferSize);

Ali

Reply via email to