]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
More robust loading; make demo more clear
authorMichael Giagnocavo <mgg@giagnocavo.net>
Wed, 29 Jul 2009 02:08:47 +0000 (02:08 +0000)
committerMichael Giagnocavo <mgg@giagnocavo.net>
Wed, 29 Jul 2009 02:08:47 +0000 (02:08 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@14405 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/languages/mod_managed/managed/Demo.csx [moved from src/mod/languages/mod_managed/managed/Demo.cs with 95% similarity]
src/mod/languages/mod_managed/managed/FreeSWITCH.Managed.csproj
src/mod/languages/mod_managed/managed/Loader.cs

similarity index 95%
rename from src/mod/languages/mod_managed/managed/Demo.cs
rename to src/mod/languages/mod_managed/managed/Demo.csx
index d342c5443e9d025687f0be85602dfaa2fbed4c24..7a2509da961d9db0e092ba2293434ac82021b62a 100644 (file)
@@ -32,7 +32,7 @@
 // How to test the demo (in the mod/managed directory):\r
 // -- Compile to dll for "normal" loading\r
 // -- Compile to exe for script EXE loading\r
-// -- Rename to demo.csx for dynamic compilation\r
+// -- Copy to managed directory for dynamic compilation\r
 \r
 using System;\r
 using FreeSWITCH;\r
@@ -85,7 +85,7 @@ public class LoadDemo : ILoadNotificationPlugin {
 \r
 public class ScriptDemo {\r
 \r
-    static void Main() {\r
+    public static void Main() {\r
         switch (FreeSWITCH.Script.ContextType) {\r
             case ScriptContextType.Api: {\r
                     var ctx = FreeSWITCH.Script.GetApiContext();\r
index 7010cf15c11eddeb767170003b538298eda49448..d98e183a8d677941282f2c10e3d8d17fa7cca4fa 100644 (file)
@@ -52,7 +52,7 @@
     <Compile Include="Loader.cs" />\r
     <Compile Include="Extensions.cs" />\r
     <Compile Include="Log.cs" />\r
-    <None Include="Demo.cs" />\r
+    <None Include="Demo.csx" />\r
     <Compile Include="PluginInterfaces.cs" />\r
     <Compile Include="PluginManager.cs" />\r
     <Compile Include="ScriptPluginManager.cs" />\r
index f2e93d6244b6d4d40088d6e587e694af41343872..c7c9cc12c6460bec789a72ed4269b915c3a603ba 100644 (file)
@@ -219,15 +219,24 @@ namespace FreeSWITCH {
             setup.ApplicationName = Path.GetFileName(fileName) + "_" + appDomainCount;\r
             var domain = AppDomain.CreateDomain(setup.ApplicationName, null, setup);\r
                 \r
-            var pm = (PluginManager)domain.CreateInstanceAndUnwrap(pmType.Assembly.FullName, pmType.FullName, null);\r
-            if (!pm.Load(fileName)) {\r
+            PluginManager pm;\r
+            try {\r
+                pm = (PluginManager)domain.CreateInstanceAndUnwrap(pmType.Assembly.FullName, pmType.FullName, null);\r
+                if (!pm.Load(fileName)) {\r
+                    AppDomain.Unload(domain);\r
+                    unloadFile(fileName);\r
+                    return;\r
+                }\r
+            } catch (Exception ex) {\r
+                // On an exception, we will unload the current file so an old copy doesnt stay active\r
+                Log.WriteLine(LogLevel.Alert, "Exception loading {0}: {1}", fileName, ex.ToString());\r
                 AppDomain.Unload(domain);\r
                 unloadFile(fileName);\r
                 return;\r
             }\r
 \r
+            // Update dictionaries atomically\r
             lock (loaderLock) {\r
-                // Update dictionaries atomically\r
                 unloadFile(fileName);\r
 \r
                 var pi = new PluginInfo { FileName = fileName, Domain = domain, Manager = pm };\r
@@ -279,7 +288,7 @@ namespace FreeSWITCH {
                         AppDomain.Unload(d);\r
                         Log.WriteLine(LogLevel.Info, "Unloaded {0}, domain {1}.", pi.FileName, friendlyName);\r
                     } catch (Exception ex) {\r
-                        Log.WriteLine(LogLevel.Critical, "Could not unload {0}, domain {1}: {2}", pi.FileName, friendlyName, ex.ToString());\r
+                        Log.WriteLine(LogLevel.Alert, "Could not unload {0}, domain {1}: {2}", pi.FileName, friendlyName, ex.ToString());\r
                     }\r
                 });\r
                 t.Priority = System.Threading.ThreadPriority.BelowNormal;\r