summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/DotNetOpenAuth/OpenId/Provider/ProviderEndpoint.cs19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/DotNetOpenAuth/OpenId/Provider/ProviderEndpoint.cs b/src/DotNetOpenAuth/OpenId/Provider/ProviderEndpoint.cs
index 635a3c0..3c507a1 100644
--- a/src/DotNetOpenAuth/OpenId/Provider/ProviderEndpoint.cs
+++ b/src/DotNetOpenAuth/OpenId/Provider/ProviderEndpoint.cs
@@ -42,7 +42,12 @@ namespace DotNetOpenAuth.OpenId.Provider {
/// <summary>
/// Backing field for the <see cref="Provider"/> property.
/// </summary>
- private static OpenIdProvider provider = CreateProvider();
+ private static OpenIdProvider provider;
+
+ /// <summary>
+ /// The lock that must be obtained when initializing the provider field.
+ /// </summary>
+ private static object providerInitializerLock = new object();
/// <summary>
/// Fired when an incoming OpenID request is an authentication challenge
@@ -57,6 +62,14 @@ namespace DotNetOpenAuth.OpenId.Provider {
/// <value>The default value is an <see cref="OpenIdProvider"/> instance initialized according to the web.config file.</value>
public static OpenIdProvider Provider {
get {
+ if (provider == null) {
+ lock (providerInitializerLock) {
+ if (provider == null) {
+ provider = CreateProvider();
+ }
+ }
+ }
+
return provider;
}
@@ -119,7 +132,7 @@ namespace DotNetOpenAuth.OpenId.Provider {
// Then try the configuration file specified one. Finally, use the default
// in-memory one that's built into OpenIdProvider.
// determine what incoming message was received
- IRequest request = provider.GetRequest();
+ IRequest request = Provider.GetRequest();
if (request != null) {
// process the incoming message appropriately and send the response
if (!request.IsResponseReady) {
@@ -130,7 +143,7 @@ namespace DotNetOpenAuth.OpenId.Provider {
PendingAuthenticationRequest = null;
}
if (request.IsResponseReady) {
- provider.SendResponse(request);
+ Provider.SendResponse(request);
Page.Response.End();
PendingAuthenticationRequest = null;
}