// // Multiple-threads might hit this one on startup, and we have // to delay-initialize until we have the HttpContext // internal static HttpApplication GetApplication(HttpContext context) { HttpApplicationFactory factory = theFactory; HttpApplication app = null; if (factory.app_start_needed) { if (context == null) { return(null); } factory.InitType(context); lock (factory) { if (factory.app_start_needed) { foreach (string dir in HttpApplication.BinDirs) { WatchLocationForRestart(dir, "*.dll"); } // Restart if the App_* directories are created... WatchLocationForRestart(".", "App_Code"); WatchLocationForRestart(".", "App_Browsers"); WatchLocationForRestart(".", "App_GlobalResources"); // ...or their contents is changed. WatchLocationForRestart("App_Code", "*", true); WatchLocationForRestart("App_Browsers", "*"); WatchLocationForRestart("App_GlobalResources", "*"); app = factory.FireOnAppStart(context); factory.app_start_needed = false; return(app); } } } app = (HttpApplication)Interlocked.Exchange(ref factory.next_free, null); if (app != null) { app.RequestCompleted = false; return(app); } lock (factory.available) { if (factory.available.Count > 0) { app = (HttpApplication)factory.available.Pop(); app.RequestCompleted = false; return(app); } } return((HttpApplication)Activator.CreateInstance(factory.app_type, true)); }