[Mono-dev] AppDomain from unmanaged code and handle_thunk

Joachim Ante joe at otee.dk
Fri May 5 20:08:32 EDT 2006


We are embedding mono in our application, whenever a user changes a C# file
we recompile and reload the assembly. Whenever i reload an assembly i want
to create a new AppDomain and activate it.
The problem is i need to do this or at least start the process from c code.

Optimally i want to:
1. Unload the old app domain
2. Create a new app domain
3. Load all assemblies into it
4. Execute some code in it
5. When the user changes a C# file, repeat the whole processs.

At the moment i am calling a C# function from C which will simply create a
new apdomain using AppDomain.CreateDomain("UnityRuntime");

Then i activate the app domain from c code using:
ves_icall_System_AppDomain_InternalPushDomainRefByID (domainID);
ves_icall_System_AppDomain_InternalSetDomainByID (domainID);

That works fine in most cases but i sometimes get an abort in mini-ppc.c
line 2329:

    if (pdata.found != 1)
        g_print ("thunk failed for %p from %p\n", target, code);
    g_assert (pdata.found == 1);

I am wondering what does this abort mean?

Since the code works fine if i don't create and activate those domains, i
presume there is something wrong with how i activate the domain.
I tried a lot of different ways of activating the domain most of which just
crashed in random places and this one got me farthest.

What is the recommended way of activating/creating/unloading an appdomain
from c code?

Best regards,
Joachim Ante

More information about the Mono-devel-list mailing list