]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
This should fix mono crash on Linux
authorMichael Giagnocavo <mgg@giagnocavo.net>
Tue, 20 Jan 2009 22:35:15 +0000 (22:35 +0000)
committerMichael Giagnocavo <mgg@giagnocavo.net>
Tue, 20 Jan 2009 22:35:15 +0000 (22:35 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@11324 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/languages/mod_managed/freeswitch_managed.h
src/mod/languages/mod_managed/mod_managed.cpp

index 6bc6f6d617ed3abebb78490aabf0fba11a1113a6..e21d404bca0da97cfce529146267cf7b1c06f5f5 100644 (file)
@@ -47,6 +47,7 @@ typedef char* (*inputFunction)(void*, switch_input_type_t);
 #include <mono/jit/jit.h>
 #include <mono/metadata/assembly.h>
 #include <mono/metadata/environment.h>
+#include <mono/metadata/mono-config.h>
 #include <mono/metadata/threads.h>
 #include <mono/metadata/debug-helpers.h>
 #endif
index b2ad33c0169fecf33d69dfe7b71cabd1f79e8d26..c14c521d0759152d646ecc2f621c4d8d5cc5f56e 100644 (file)
@@ -49,7 +49,7 @@ using namespace System::Runtime::InteropServices;
 SWITCH_BEGIN_EXTERN_C \r
 \r
 SWITCH_MODULE_LOAD_FUNCTION(mod_managed_load);\r
-SWITCH_MODULE_DEFINITION(mod_managed, mod_managed_load, NULL, NULL);\r
+SWITCH_MODULE_DEFINITION_EX(mod_managed, mod_managed_load, NULL, NULL, SMODF_GLOBAL_SYMBOLS);\r
 \r
 SWITCH_STANDARD_API(managedrun_api_function);  /* ExecuteBackground */\r
 SWITCH_STANDARD_API(managed_api_function);     /* Execute */\r
@@ -186,6 +186,11 @@ switch_status_t loadRuntime()
                return SWITCH_STATUS_FALSE;\r
        }\r
 \r
+#ifndef WIN32  \r
+       // So linux can find the .so\r
+       mono_config_parse_memory("<configuration><dllmap dll=\"mod_managed\" target=\"mod_managed.so\"/></configuration>");\r
+#endif\r
+\r
        switch_snprintf(filename, 256, "%s%s%s", SWITCH_GLOBAL_dirs.mod_dir, SWITCH_PATH_SEPARATOR, MOD_MANAGED_DLL);\r
        globals.domain = mono_jit_init(filename);\r
 \r
@@ -336,13 +341,12 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_managed_load)
        /* Run loader */ \r
        MonoObject * exception = NULL;\r
        MonoObject * objResult = mono_runtime_invoke(globals.loadMethod, NULL, NULL, &exception);\r
-       success = *(int *) mono_object_unbox(objResult);\r
-\r
        if (exception) {\r
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Load threw an exception.\n");\r
                mono_print_unhandled_exception(exception);\r
                return SWITCH_STATUS_FALSE;\r
        }\r
+       success = *(int *) mono_object_unbox(objResult);\r
 #endif\r
        if (success) {\r
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Load completed successfully.\n");\r