Synchronization fix
authorArina Itkes <arina@mono-cvs.ximian.com>
Thu, 29 Nov 2007 08:34:58 +0000 (08:34 -0000)
committerArina Itkes <arina@mono-cvs.ximian.com>
Thu, 29 Nov 2007 08:34:58 +0000 (08:34 -0000)
svn path=/trunk/mcs/; revision=90416

mcs/class/System.Web.Services/ChangeLog
mcs/class/System.Web.Services/System.Web.Services.Protocols/WebClientAsyncResult.cs
mcs/class/System.Web.Services/System.Web.Services.Protocols/WebClientProtocol.cs

index 423206fac73e3c4118452daa98a9e211463cacec..87797af1460046ed8b65283562519fbc64410c25 100644 (file)
@@ -1,3 +1,8 @@
+2007-11-22  Arina Itkes
+
+       * WebClientAsyncResult.cs, WebClientProtocol.cs: 
+         Synchronization fix
+
 2007-10-05  Atsushi Enomoto  <atsushi@ximian.com>
 
        * System.Web.Services_test.dll.sources : added WebServiceTest.cs.
index cda505e5e6a4bfda61061f9e6bc8cf92715a3d66..c92e0f552cf927ba7ef35f613808a5f6029cfd8a 100644 (file)
@@ -116,6 +116,8 @@ namespace System.Web.Services.Protocols {
                {
                        lock (this)
                        {
+                               if (_done)
+                                       return;
                                Monitor.Wait (this);
                        }
                }
index 08f41581c57718cba2b4f5e6020b988f79ecac85..a5c125388866aecf33cf48c8048254cf57189a08 100644 (file)
@@ -48,8 +48,6 @@ namespace System.Web.Services.Protocols {
                bool preAuthenticate;
                Encoding requestEncoding;
                int timeout;
-               string url;
-               bool abort;
 
                //
                // Used by SoapHttpClientProtocol, use this to avoid creating a new Uri on each invocation.
@@ -89,8 +87,6 @@ namespace System.Web.Services.Protocols {
                        preAuthenticate = false;
                        requestEncoding = null;
                        timeout = 100000;
-                       url = String.Empty;
-                       abort = false;
                }
                
                #endregion // Constructors
@@ -135,11 +131,8 @@ namespace System.Web.Services.Protocols {
                [RecommendedAsConfigurable (true)]
                [WebServicesDescription ("The base URL to the server to use for requests.")]
                public string Url {
-                       get { return url; }
-                       set {
-                               url = value;
-                               uri = new Uri (url);
-                       }
+                       get { return uri == null ? String.Empty : uri.AbsoluteUri; }
+                       set { uri = new Uri (value); }
                }
 #if NET_2_0
                public bool UseDefaultCredentials {
@@ -154,11 +147,10 @@ namespace System.Web.Services.Protocols {
 
                public virtual void Abort ()
                {
-                       if (current_request != null){
-                               current_request.Abort ();
-                               current_request = null;
-                       }
-                       abort = true;
+                       WebRequest request = current_request;
+                       current_request = null;
+                       if (request != null) 
+                               request.Abort ();
                }
 
                protected static void AddToCache (Type type, object value)
@@ -176,22 +168,20 @@ namespace System.Web.Services.Protocols {
                        if (uri == null)
                                throw new InvalidOperationException ("uri is null");
 
-                       current_request = WebRequest.Create (uri);
-                       current_request.Timeout = timeout;
-                       current_request.PreAuthenticate = preAuthenticate;
-                       current_request.ConnectionGroupName = connectionGroupName;
+                       WebRequest request = WebRequest.Create (uri);
+                       request.Timeout = timeout;
+                       request.PreAuthenticate = preAuthenticate;
+                       request.ConnectionGroupName = connectionGroupName;
 
                        if (credentials != null)
-                               current_request.Credentials = credentials;
+                               request.Credentials = credentials;
 
-                       return current_request;
+                       current_request = request;
+                       return request;
                }
 
                protected virtual WebResponse GetWebResponse (WebRequest request)
                {
-                       if (abort)
-                               throw new WebException ("The operation has been aborted.", WebExceptionStatus.RequestCanceled);
-
                        WebResponse response = null;
                        try {
                                request.Timeout = timeout;
@@ -207,9 +197,6 @@ namespace System.Web.Services.Protocols {
 
                protected virtual WebResponse GetWebResponse (WebRequest request, IAsyncResult result)
                {
-                       if (abort)
-                               throw new WebException ("The operation has been aborted.", WebExceptionStatus.RequestCanceled);
-
                        return request.EndGetResponse (result);
                }