| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
The check for whether a Capability was free was inverted, which harmed
performance for callbacks.
|
|
|
|
|
| |
Also add a panic for resurrecting a thread blocked on an exception,
since it should never happen.
|
| |
|
|
|
|
| |
Fixes an ASSERTION failure with concprog001, -threaded -debug, +RTS -N2
|
|
|
|
|
|
|
|
|
|
| |
This has no effect with static libraries, but when the RTS is in a
shared library it does two things:
- it prevents the function from being exposed by the shared library
- internal calls to the function can use the faster non-PLT calls,
because the function cannot be overriden at link time.
|
| |
|
| |
|
|
|
|
|
| |
See commentary at
http://hackage.haskell.org/trac/ghc/wiki/Commentary/Packages
|
|
|
|
| |
It breaks the unregisterised build on IA64.
|
|
|
|
| |
Fixes linking with -dynamic
|
|
|
|
| |
This gives about a 15% performance boost in GHCi for me. nice!
|
|
|
|
|
|
|
|
|
|
| |
rolling back:
* use cas() to claim the closure in copyPart(), to match copy_tag()
* rename whitehole_spin to evac_collision, and update it properly
This introduced a new failure in parallel GC. I'll rollback for now
until I've fixed it.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
It is possible for the program to allocate single object larger than a
block, without going through the normal large-object mechanisms that
we have for arrays and threads and so on.
The GC was assuming that no object was larger than a block, but #3424
contains a program that breaks the assumption. This patch removes the
assumption. The objects in question will still be copied, that is
they don't get the normal large-object treatment, but this case is
unlikely to occur often in practice.
In the future we may improve things by generating code to allocate
them as large objects in the first place.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
copyPart() was still using the old WHITEHOLE mechanism for locking the
closure. I don't think this fixes any actual bugs, but it removes a
gratuitous difference between two functions that should look similar.
|
|
|
|
| |
Fixes crash in concprog002(threaded2_qw), and possibly other problems
|
| |
|
|
|
|
|
| |
Otherwise, finalizer callbacks cause a deadlock in the threaded RTS
(including GHCi)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There were two bugs, and had it not been for the first one we would
not have noticed the second one, so this is quite fortunate.
The first bug is in stg_unblockAsyncExceptionszh_ret, when we found a
pending exception to raise, but don't end up raising it, there was a
missing adjustment to the stack pointer.
The second bug was that this case was actually happening at all: it
ought to be incredibly rare, because the pending exception thread
would have to be killed between us finding it and attempting to raise
the exception. This made me suspicious. It turned out that there was
a race condition on the tso->flags field; multiple threads were
updating this bitmask field non-atomically (one of the bits is the
dirty-bit for the generational GC). The fix is to move the dirty bit
into its own field of the TSO, making the TSO one word larger (sadly).
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Also, use C99-style array initialisers
|
|
|
|
| |
For consistency with other RTS exported symbols
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The first phase of this tidyup is focussed on the header files, and in
particular making sure we are exposinng publicly exactly what we need
to, and no more.
- Rts.h now includes everything that the RTS exposes publicly,
rather than a random subset of it.
- Most of the public header files have moved into subdirectories, and
many of them have been renamed. But clients should not need to
include any of the other headers directly, just #include the main
public headers: Rts.h, HsFFI.h, RtsAPI.h.
- All the headers needed for via-C compilation have moved into the
stg subdirectory, which is self-contained. Most of the headers for
the rest of the RTS APIs have moved into the rts subdirectory.
- I left MachDeps.h where it is, because it is so widely used in
Haskell code.
- I left a deprecated stub for RtsFlags.h in place. The flag
structures are now exposed by Rts.h.
- Various internal APIs are no longer exposed by public header files.
- Various bits of dead code and declarations have been removed
- More gcc warnings are turned on, and the RTS code is more
warning-clean.
- More source files #include "PosixSource.h", and hence only use
standard POSIX (1003.1c-1995) interfaces.
There is a lot more tidying up still to do, this is just the first
pass. I also intend to standardise the names for external RTS APIs
(e.g use the rts_ prefix consistently), and declare the internal APIs
as hidden for shared libraries.
|
| |
|
| |
|
|
|
|
| |
amazing this hasn't caused any problems before now
|
| |
|