[GHC] #13148: Adding weak pointers to non-mutable unboxed values segfaults
GHC
ghc-devs at haskell.org
Wed Jan 18 13:30:03 UTC 2017
#13148: Adding weak pointers to non-mutable unboxed values segfaults
-------------------------------------+-------------------------------------
Reporter: mboes | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by rwbarton):
I don't know exactly how `mkWeakNoFinalizer#` works but surely it can only
possibly attach a finalizer to a value of ''boxed'' type, that is, a value
that is stored as a closure on the Haskell heap. After all the meaning of
a finalizer is that it's an action that runs when the object is no longer
live after GC. `MutVar#` and `MVar#` are boxed (but unlifted) types, but
`Addr#` is unboxed, really just a synonym for `Int#`. It doesn't make any
more sense to attach a finalizer to `p#` than it does to attach one to
`7#`. See
https://ghc.haskell.org/trac/ghc/wiki/Commentary/Rts/Storage/HeapObjects
for the difference between unboxed and unlifted.
The segfault happened because the weak finalizer code interpreted the bit
pattern of `p#` as a pointer into the Haskell heap, while it was actually
a pointer into the C heap (produced by `malloc`); and chaos ensued. (Based
on this program snippet, it looks like you might just want
`mallocForeignPtr`.) But morally the problem isn't really with C vs.
Haskell heap but with trying to attach a finalizer to an unboxed value.
The documentation you refer to is the documentation for the user-facing
System.Mem.Weak module. We could add documentation to
`mkWeakNoFinalizer#`, even though the primops are really only intended to
be used to implement the base libraries. What would have been helpful?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13148#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list