#include "STM.h" /* initSTM */
#include "Signals.h"
#include "RtsSignals.h"
+#include "ThrIOManager.h"
#include "Timer.h" /* startTimer, stopTimer */
#include "Weak.h"
#include "Ticky.h"
# include "LLC.h"
#endif
-#if defined(mingw32_HOST_OS)
+#if defined(mingw32_HOST_OS) && !defined(THREADED_RTS)
#include "win32/AsyncIO.h"
#endif
/* Initialise the performance tracking library */
#ifdef USE_PAPI
- /* Must fix to abort gracefully */
- if(PAPI_library_init(PAPI_VER_CURRENT) != PAPI_VER_CURRENT)
- exit(1);
+ {
+ int ver;
+ if ((ver = PAPI_library_init(PAPI_VER_CURRENT)) != PAPI_VER_CURRENT) {
+ if (ver > 0) {
+ errorBelch("PAPI_library_init: wrong version: %x", ver);
+ stg_exit(EXIT_FAILURE);
+ } else {
+ sysErrorBelch("PAPI_library_init");
+ stg_exit(EXIT_FAILURE);
+ }
+ }
+ }
#ifdef THREADED_RTS
{
int err;
initDefaultHandlers();
#endif
-#if defined(mingw32_HOST_OS)
+#if defined(mingw32_HOST_OS) && !defined(THREADED_RTS)
startupAsyncIO();
#endif
x86_init_fpu();
#endif
-#if defined(THREADED_RTS) && !defined(mingw32_HOST_OS)
+#if defined(THREADED_RTS)
ioManagerStart();
#endif
/* start timing the shutdown */
stat_startExit();
-#if defined(THREADED_RTS) && !defined(mingw32_HOST_OS)
+#if defined(THREADED_RTS)
ioManagerDie();
#endif
if (RtsFlags.TickyFlags.showTickyStats) PrintTickyInfo();
#endif
-#if defined(mingw32_HOST_OS)
+#if defined(mingw32_HOST_OS) && !defined(THREADED_RTS)
shutdownAsyncIO();
#endif