From db20243dfe72d5a69ece485bf7097b29720f378c Mon Sep 17 00:00:00 2001 From: Michael Giagnocavo Date: Wed, 29 Jul 2009 02:08:47 +0000 Subject: [PATCH] More robust loading; make demo more clear git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@14405 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- .../mod_managed/managed/{Demo.cs => Demo.csx} | 4 ++-- .../managed/FreeSWITCH.Managed.csproj | 2 +- src/mod/languages/mod_managed/managed/Loader.cs | 17 +++++++++++++---- 3 files changed, 16 insertions(+), 7 deletions(-) rename src/mod/languages/mod_managed/managed/{Demo.cs => Demo.csx} (95%) diff --git a/src/mod/languages/mod_managed/managed/Demo.cs b/src/mod/languages/mod_managed/managed/Demo.csx similarity index 95% rename from src/mod/languages/mod_managed/managed/Demo.cs rename to src/mod/languages/mod_managed/managed/Demo.csx index d342c5443e..7a2509da96 100644 --- a/src/mod/languages/mod_managed/managed/Demo.cs +++ b/src/mod/languages/mod_managed/managed/Demo.csx @@ -32,7 +32,7 @@ // How to test the demo (in the mod/managed directory): // -- Compile to dll for "normal" loading // -- Compile to exe for script EXE loading -// -- Rename to demo.csx for dynamic compilation +// -- Copy to managed directory for dynamic compilation using System; using FreeSWITCH; @@ -85,7 +85,7 @@ public class LoadDemo : ILoadNotificationPlugin { public class ScriptDemo { - static void Main() { + public static void Main() { switch (FreeSWITCH.Script.ContextType) { case ScriptContextType.Api: { var ctx = FreeSWITCH.Script.GetApiContext(); diff --git a/src/mod/languages/mod_managed/managed/FreeSWITCH.Managed.csproj b/src/mod/languages/mod_managed/managed/FreeSWITCH.Managed.csproj index 7010cf15c1..d98e183a8d 100644 --- a/src/mod/languages/mod_managed/managed/FreeSWITCH.Managed.csproj +++ b/src/mod/languages/mod_managed/managed/FreeSWITCH.Managed.csproj @@ -52,7 +52,7 @@ - + diff --git a/src/mod/languages/mod_managed/managed/Loader.cs b/src/mod/languages/mod_managed/managed/Loader.cs index f2e93d6244..c7c9cc12c6 100644 --- a/src/mod/languages/mod_managed/managed/Loader.cs +++ b/src/mod/languages/mod_managed/managed/Loader.cs @@ -219,15 +219,24 @@ namespace FreeSWITCH { setup.ApplicationName = Path.GetFileName(fileName) + "_" + appDomainCount; var domain = AppDomain.CreateDomain(setup.ApplicationName, null, setup); - var pm = (PluginManager)domain.CreateInstanceAndUnwrap(pmType.Assembly.FullName, pmType.FullName, null); - if (!pm.Load(fileName)) { + PluginManager pm; + try { + pm = (PluginManager)domain.CreateInstanceAndUnwrap(pmType.Assembly.FullName, pmType.FullName, null); + if (!pm.Load(fileName)) { + AppDomain.Unload(domain); + unloadFile(fileName); + return; + } + } catch (Exception ex) { + // On an exception, we will unload the current file so an old copy doesnt stay active + Log.WriteLine(LogLevel.Alert, "Exception loading {0}: {1}", fileName, ex.ToString()); AppDomain.Unload(domain); unloadFile(fileName); return; } + // Update dictionaries atomically lock (loaderLock) { - // Update dictionaries atomically unloadFile(fileName); var pi = new PluginInfo { FileName = fileName, Domain = domain, Manager = pm }; @@ -279,7 +288,7 @@ namespace FreeSWITCH { AppDomain.Unload(d); Log.WriteLine(LogLevel.Info, "Unloaded {0}, domain {1}.", pi.FileName, friendlyName); } catch (Exception ex) { - Log.WriteLine(LogLevel.Critical, "Could not unload {0}, domain {1}: {2}", pi.FileName, friendlyName, ex.ToString()); + Log.WriteLine(LogLevel.Alert, "Could not unload {0}, domain {1}: {2}", pi.FileName, friendlyName, ex.ToString()); } }); t.Priority = System.Threading.ThreadPriority.BelowNormal;