RTS tidyup sweep, first phase 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.
Set thread affinity with +RTS -qa (only on Linux so far)
Add getNumberOfProcessors(), FIX MacOS X build problem (hopefully) Somebody needs to implement getNumberOfProcessors() for MacOS X, currently it will return 1.
add comment for ASSERT_LOCK_HELD()
Reinstate: Always check the result of pthread_mutex_lock() and pthread_mutex_unlock(). Sun Jan 4 19:24:43 GMT 2009 Matthias Kilian <kili@outback.escape.de> Don't check pthread_mutex_*lock() only on Linux and/or only if DEBUG is defined. The return values of those functions are well defined and should be supported on all operation systems with pthreads. The checks are cheap enough to do them even in the default build (without -DDEBUG). While here, recycle an unused macro ASSERT_LOCK_NOTHELD, and let the debugBelch part enabled with -DLOCK_DEBUG work independently of -DDEBUG.
UNDO: Always check the result of pthread_mutex_lock() and pthread_mutex_unlock(). This patch caused problems on Mac OS X, undoing until we can do it better. rolling back: Sun Jan 4 19:24:43 GMT 2009 Matthias Kilian <kili@outback.escape.de> * Always check the result of pthread_mutex_lock() and pthread_mutex_unlock(). Don't check pthread_mutex_*lock() only on Linux and/or only if DEBUG is defined. The return values of those functions are well defined and should be supported on all operation systems with pthreads. The checks are cheap enough to do them even in the default build (without -DDEBUG). While here, recycle an unused macro ASSERT_LOCK_NOTHELD, and let the debugBelch part enabled with -DLOCK_DEBUG work independently of -DDEBUG. M ./includes/OSThreads.h -30 +10
Always check the result of pthread_mutex_lock() and pthread_mutex_unlock(). Don't check pthread_mutex_*lock() only on Linux and/or only if DEBUG is defined. The return values of those functions are well defined and should be supported on all operation systems with pthreads. The checks are cheap enough to do them even in the default build (without -DDEBUG). While here, recycle an unused macro ASSERT_LOCK_NOTHELD, and let the debugBelch part enabled with -DLOCK_DEBUG work independently of -DDEBUG.
Windows: remove the {Enter,Leave}CricialSection wrappers The C-- parser was missing the "stdcall" calling convention for foreign calls, but once added we can call {Enter,Leave}CricialSection directly.
Fix the threaded RTS on Windows When calling EnterCriticalSection and LeaveCriticalSection from C-- code, we go via wrappers which use ccall (rather than stdcall).
FIX BUILD (on Windows): follow changes to make threaded RTS compile with -fasm
Make the threaded RTS compilable using -fasm We needed to turn some inline C functions and C macros into either real C functions or C-- macros.
Free thread local storage on shutdown
Partial fix for #926 It seems that when a program exits with open DLLs on Windows, the system attempts to shut down the DLLs, but it also terminates (some of?) the running threads. The RTS isn't prepared for threads to die unexpectedly, so it sits around waiting for its workers to finish. This bites in two places: ShutdownIOManager() in the the unthreaded RTS, and shutdownCapability() in the threaded RTS. So far I've modified the latter to notice when worker threads have died unexpectedly and continue shutting down. It seems a bit trickier to fix the unthreaded RTS, so for now the workaround for #926 is to use the threaded RTS.
Add closeMutex and use it on clean up
Reorganisation of the source tree Most of the other users of the fptools build system have migrated to Cabal, and with the move to darcs we can now flatten the source tree without losing history, so here goes. The main change is that the ghc/ subdir is gone, and most of what it contained is now at the top level. The build system now makes no pretense at being multi-project, it is just the GHC build system. No doubt this will break many things, and there will be a period of instability while we fix the dependencies. A straightforward build should work, but I haven't yet fixed binary/source distributions. Changes to the Building Guide will follow, too.