logo       

[GHC] #732: Error in shutdownHaskell() in Win32 DLL: msg#00121

lang.haskell.glasgow.bugs

Subject: [GHC] #732: Error in shutdownHaskell() in Win32 DLL

#732: Error in shutdownHaskell() in Win32 DLL
---------------------------------+------------------------------------------
Reporter: cschmidt@xxxxxxx | Owner:
Type: bug | Status: new
Priority: normal | Milestone: 6.4.2
Component: Runtime System | Version: 6.4.1
Severity: normal | Keywords:
Os: Windows | Difficulty: Easy (1 hr)
Architecture: Unknown |
---------------------------------+------------------------------------------
If an exception occurs in a Windows DLL produced by GHC,
the following error message appears:

{{{
ghcDll: internal error: too many hs_exit()s
Please report this as a bug to glasgow-haskell-bugs@xxxxxxxxxxx,
or http://www.sourceforge.net/projects/ghc/
}}}

== How to reproduce ==

1. Make a Haskell DLL using the enclosed Dll.hs and dllMain.c, e.g.
{{{
ghc -c Dll.hs -fglasgow-exts
ghc -c dllMain.c
ghc --mk-dll -o test.dll Dll.o Dll_stub.o dllMain.o
}}}

2. Generate an export library for the DLL, e.g.
{{{
lib /DEF:test.def /MACHINE:x86 /OUT:test.lib
}}}

3. Compile the executable with Visual C++ and run it.
{{{
cl -c testdll.cpp
link testdll.obj test.lib /OUT:testdll.exe
testdll.exe
}}}

Note: if I comment out the shutdownHaskell() call from dllMain.c
(the line marked with /***/), it works fine.

Kind regards,

Cyril

--- Dll.hs ---
{{{
module Dll (test) where

foreign export ccall test :: IO ()

test = error "Exception occurred"
}}}

--- dllMain.c ---
{{{
#include <windows.h>
#include <Rts.h>

extern void __stginit_Dll(void);

static char* args[] = { "ghcDll", NULL };

BOOL
STDCALL
DllMain
( HANDLE hModule
, DWORD reason
, void* reserved
)
{
if (reason == DLL_PROCESS_ATTACH) {
startupHaskell(1, args, __stginit_Dll);
return TRUE;
} else if (reason == DLL_PROCESS_DETACH) {
/***/ shutdownHaskell();
}
return TRUE;
}
}}}

--- test.def ---
{{{
EXPORTS
test
}}}

--- testdll.cpp ---
{{{
extern "C" void test();

int main() {
test();
return 0;
}
}}}

--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/732>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@xxxxxxxxxxx
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs
<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise