[Haskell-cafe] carry "state" around ....
Brandon S. Allbery KF8NH
allbery at ece.cmu.edu
Mon Jul 28 03:04:22 EDT 2008
On 2008 Jul 28, at 2:36, Galchin, Vasili wrote:
> Hi Brandon,
> So even if I go to ForeignPtr is a problem? And/Or is this a
> "by reference" vs "by value" issue?
As I read your code, you're allocating a C object, poking the Haskell
fields into it, and passing it on, then peeking the values back out.
This won't work; the C pointer value passed to aio_write() is the
value that must be passed to subsequent operations on that aiocb (such
as aio_return()). More to the point: the exact chunk of memory
passed to aio_write(), unmodified, must be passed to any other aio
functions checking for or blocking on completion of the write. You
may not move it around or arbitrarily change values within it.
You could do this if your Haskell aiocb also retained the ForeignPtr
to the originally allocated C object... but after the initial pokes,
the only thing you can safely do with that object is pass it to C and
peek the current values out of it, unless the C API specifically says
you can modify fields within it while I/O operations are pending (and
I'd be rather surprised if it did).
brandon s. allbery [solaris,freebsd,perl,pugs,haskell] allbery at kf8nh.com
system administrator [openafs,heimdal,too many hats] allbery at ece.cmu.edu
electrical and computer engineering, carnegie mellon university KF8NH
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe