[System] Fix SmtpClient.SendMailAsync never completing
authorAdam Burgess <AdamBurgess@users.noreply.github.com>
Mon, 21 Sep 2015 18:35:39 +0000 (04:35 +1000)
committerAdam Burgess <AdamBurgess@users.noreply.github.com>
Mon, 21 Sep 2015 18:43:12 +0000 (04:43 +1000)
mcs/class/System/System.Net.Mail/SmtpClient.cs
mcs/class/System/Test/System.Net.Mail/SmtpClientTest.cs

index 278e6e3426f83c0cf5c3b9d57cb971aa7a458f9d..db3b81859632dbd1a3305f2f2c16bb35310f50b5 100644 (file)
@@ -742,7 +742,7 @@ namespace System.Net.Mail {
 
                static void SendMailAsyncCompletedHandler (TaskCompletionSource<object> source, AsyncCompletedEventArgs e, SendCompletedEventHandler handler, SmtpClient client)
                {
-                       if ((object) handler != e.UserState)
+                       if (source != e.UserState)
                                return;
 
                        client.SendCompleted -= handler;
index 0d1d124835d0abb745e346751e34c6e8dd0b12d2..641b787988ea5e4894c2ee87db5739ea97813fd9 100644 (file)
@@ -389,5 +389,23 @@ namespace MonoTests.System.Net.Mail
                        Assert.AreEqual ("<bar@example.com>", server.rcpt_to);
                }
 
+               [Test]
+               public void Deliver_Async ()
+               {
+                       var server = new SmtpServer ();
+                       var client = new SmtpClient ("localhost", server.EndPoint.Port);
+                       var msg = new MailMessage ("foo@example.com", "bar@example.com", "hello", "howdydoo\r\n");
+
+                       Thread t = new Thread (server.Run);
+                       t.Start ();
+                       var task = client.SendMailAsync (msg);
+                       t.Join ();
+
+                       Assert.AreEqual ("<foo@example.com>", server.mail_from);
+                       Assert.AreEqual ("<bar@example.com>", server.rcpt_to);
+
+                       Assert.IsTrue (task.IsCompleted, "task");
+               }
+
        }
 }