base-compat-0.9.3: A compatibility layer for base

Safe Haskell | None
Language | Haskell98

Foreign.ForeignPtr.Unsafe.Compat

Contents

- Unsafe low-level operations

Synopsis

- unsafeForeignPtrToPtr :: ForeignPtr a -> Ptr a

## Unsafe low-level operations

unsafeForeignPtrToPtr :: ForeignPtr a -> Ptr a #

This function extracts the pointer component of a foreign pointer. This is a potentially dangerous operations, as if the argument to `unsafeForeignPtrToPtr` is the last usage occurrence of the given foreign pointer, then its finalizer(s) will be run, which potentially invalidates the plain pointer just obtained. Hence, `touchForeignPtr` must be used wherever it has to be guaranteed that the pointer lives on - i.e., has another usage occurrence.

To avoid subtle coding errors, hand written marshalling code should preferably use `withForeignPtr` rather than combinations of `unsafeForeignPtrToPtr` and `touchForeignPtr`. However, the latter routines are occasionally preferred in tool generated marshalling code.