Add option to do decryption synchronously
authorAndre Heinecke <aheinecke@intevation.de>
Mon, 8 Oct 2018 13:07:45 +0000 (15:07 +0200)
committerAndre Heinecke <aheinecke@intevation.de>
Mon, 8 Oct 2018 13:07:45 +0000 (15:07 +0200)
* src/common_indep.h (syncDec): New option.
* src/main.c (read_options): Read it.
* src/mail.cpp (do_parsing): Do not use windowmessage signaling
for parsing done.
(Mail::decryptVerify_o): Call the parser synchronously.

--
This is very ugly but might help some users who are affected
by regular crashes when reading crypto mail.

src/common_indep.h
src/mail.cpp
src/main.c

index cfe5e28..73910f4 100644 (file)
@@ -200,6 +200,7 @@ struct
   int automation;            /* General automation */
   int autotrust;             /* TOFU configured for GpgOL */
   int sync_enc;              /* Disabed async encryption */
+  int sync_dec;              /* Disabed async decryption */
   int prefer_smime;          /* S/MIME prefered when autoresolving */
   int smime_html_warn_shown; /* Flag to save if unsigned smime warning was shown */
   int autoretrieve;           /* Use --auto-key-retrieve. */
index 9e1c8d2..9796834 100644 (file)
@@ -832,7 +832,10 @@ do_parsing (LPVOID arg)
       TRETURN -1;
     }
   parser->parse();
-  do_in_ui_thread (PARSING_DONE, arg);
+  if (!opt.sync_dec)
+    {
+      do_in_ui_thread (PARSING_DONE, arg);
+    }
   gpgrt_lock_unlock (&parser_lock);
   unblockInv();
   TRETURN 0;
@@ -1146,17 +1149,26 @@ Mail::decryptVerify_o ()
                    SRCNAME, __func__, getSubject_o ().c_str(), m_parser.get());
   gpgol_release (cipherstream);
 
-  HANDLE parser_thread = CreateThread (NULL, 0, do_parsing, (LPVOID) this, 0,
-                                       NULL);
+  if (!opt.sync_dec)
+    {
+      HANDLE parser_thread = CreateThread (NULL, 0, do_parsing, (LPVOID) this, 0,
+                                           NULL);
 
-  if (!parser_thread)
+      if (!parser_thread)
+        {
+          log_error ("%s:%s: Failed to create decrypt / verify thread.",
+                     SRCNAME, __func__);
+        }
+      CloseHandle (parser_thread);
+      TRETURN 0;
+    }
+  else
     {
-      log_error ("%s:%s: Failed to create decrypt / verify thread.",
-                 SRCNAME, __func__);
+      /* Parse synchronously */
+      do_parsing ((LPVOID) this);
+      parsing_done ();
+      TRETURN 0;
     }
-  CloseHandle (parser_thread);
-
-  TRETURN 0;
 }
 
 void find_and_replace(std::string& source, const std::string &find,
index e773cb6..73d8f04 100644 (file)
@@ -334,7 +334,8 @@ read_options (void)
     }
 
   /* Hidden options  */
-  opt.sync_enc = get_conf_bool ("_syncEnc", 0);
+  opt.sync_enc = get_conf_bool ("syncEnc", 0);
+  opt.sync_dec = get_conf_bool ("syncDec", 0);
 }