Fix deadlock in Outlook 2010
authorAndre Heinecke <aheinecke@intevation.de>
Wed, 7 Mar 2018 12:30:14 +0000 (13:30 +0100)
committerAndre Heinecke <aheinecke@intevation.de>
Wed, 7 Mar 2018 12:30:14 +0000 (13:30 +0100)
* src/mail.cpp (do_crypt): In Outlook 2010 sending destroys
the Mail. So we may not hold the dtor lock for the send call.

src/mail.cpp

index aba08d3..34ef2a1 100644 (file)
@@ -751,6 +751,8 @@ do_crypt (LPVOID arg)
   if (!mail->is_inline_response ())
     {
       mail->set_crypt_state (Mail::NeedsUpdateInOOM);
+      gpgrt_lock_unlock (&dtor_lock);
+      // This deletes the Mail in Outlook 2010
       do_in_ui_thread (CRYPTO_DONE, arg);
     }
   else
@@ -758,6 +760,7 @@ do_crypt (LPVOID arg)
       mail->set_crypt_state (Mail::NeedsUpdateInMAPI);
       mail->update_crypt_mapi ();
       mail->set_crypt_state (Mail::NeedsUpdateInOOM);
+      gpgrt_lock_unlock (&dtor_lock);
     }
   /* This works around a bug in pinentry that it might
      bring the wrong window to front. So after encryption /
@@ -766,7 +769,6 @@ do_crypt (LPVOID arg)
      See GnuPG-Bug-Id: T3732
      */
   do_in_ui_thread_async (BRING_TO_FRONT, nullptr);
-  gpgrt_lock_unlock (&dtor_lock);
   return 0;
 }