WIP release debug
authorAndre Heinecke <aheinecke@intevation.de>
Mon, 15 Aug 2016 09:55:17 +0000 (11:55 +0200)
committerAndre Heinecke <aheinecke@intevation.de>
Mon, 15 Aug 2016 09:55:17 +0000 (11:55 +0200)
* src/attachment.cpp: New.
* src/gpgoladdin.cpp: New.
* src/mail.cpp: New.
* src/mailitem-events.cpp: New.
* src/mapihelp.cpp: New.
* src/oomhelp.cpp: New.
* src/revert.cpp: New.
* src/ribbon-callbacks.cpp: New.
* src/util.h: New.

src/attachment.cpp
src/gpgoladdin.cpp
src/mail.cpp
src/mailitem-events.cpp
src/mapihelp.cpp
src/oomhelp.cpp
src/revert.cpp
src/ribbon-callbacks.cpp
src/util.h

index 87071dc..0ccf2d9 100644 (file)
@@ -237,7 +237,7 @@ do_crypt_mapi (LPATTACH att, bool encrypt)
 done:
   if (symenc)
     symenc_close (symenc);
-  RELDISP (stream);
+  gpgol_release (stream);
 
   return rc;
 }
@@ -322,8 +322,8 @@ do_crypt (LPDISPATCH mailitem, bool protect)
 
 done:
 
-  RELDISP (message);
-  RELDISP (attachments);
+  gpgol_release (message);
+  gpgol_release (attachments);
   return err;
 }
 
index 28fe160..7c1ba7f 100644 (file)
@@ -191,7 +191,7 @@ GpgolAddin::~GpgolAddin (void)
     }
   log_debug ("%s:%s: Releasing Application Event Sink;",
              SRCNAME, __func__);
-  RELDISP (m_applicationEventSink);
+  gpgol_release (m_applicationEventSink);
 
   engine_deinit ();
   write_options ();
index c1cc386..1030c77 100644 (file)
@@ -85,7 +85,7 @@ Mail::Mail (LPDISPATCH mailitem) :
          and just release the Mail item. */
       log_error ("%s:%s: Failed to install MailItemEvents sink.",
                  SRCNAME, __func__);
-      mailitem->Release ();
+      gpgol_release(mailitem);
       return;
     }
   g_mail_map.insert (std::pair<LPDISPATCH, Mail *> (mailitem, this));
@@ -118,7 +118,7 @@ Mail::process_message ()
 
   log_debug ("%s:%s: incoming handler status: %i",
              SRCNAME, __func__, err);
-  message->Release ();
+  gpgol_release (message);
   return 0;
 }
 
@@ -127,7 +127,7 @@ Mail::~Mail()
   std::map<LPDISPATCH, Mail *>::iterator it;
 
   detach_MailItemEvents_sink (m_event_sink);
-  m_event_sink->Release ();
+  gpgol_release(m_event_sink);
 
   it = g_mail_map.find(m_mailitem);
   if (it != g_mail_map.end())
@@ -135,7 +135,7 @@ Mail::~Mail()
       g_mail_map.erase (it);
     }
 
-  m_mailitem->Release ();
+  gpgol_release(m_mailitem);
 }
 
 Mail *
@@ -223,7 +223,7 @@ Mail::insert_plaintext ()
   /* Invalidate UI to set the correct sig status. */
   gpgoladdin_invalidate_ui ();
 done:
-  RELDISP (base_message);
+  gpgol_release (base_message);
   return err;
 }
 
@@ -269,7 +269,7 @@ Mail::do_crypto ()
     }
   log_debug ("%s:%s: Status: %i",
              SRCNAME, __func__, err);
-  message->Release ();
+  gpgol_release (message);
   m_crypt_successful = !err;
   return err;
 }
@@ -286,7 +286,7 @@ Mail::needs_crypto ()
       return false;
     }
   ret = get_gpgol_draft_info_flags (message);
-  message->Release ();
+  gpgol_release(message);
   return ret;
 }
 
@@ -323,7 +323,7 @@ Mail::update_sender ()
   if (sender)
     {
       m_sender = get_oom_string (sender, "SmtpAddress");
-      RELDISP (sender);
+      gpgol_release (sender);
       return 0;
     }
   /* Fallback to Sender object */
@@ -331,7 +331,7 @@ Mail::update_sender ()
   if (sender)
     {
       m_sender = get_pa_string (sender, PR_SMTP_ADDRESS_DASL);
-      RELDISP (sender);
+      gpgol_release (sender);
       return 0;
     }
   /* We don't have s sender object or SendUsingAccount,
@@ -340,7 +340,7 @@ Mail::update_sender ()
   if (sender)
     {
       m_sender = get_pa_string (sender, PR_SMTP_ADDRESS_DASL);
-      RELDISP (sender);
+      gpgol_release (sender);
       return 0;
     }
 
@@ -455,7 +455,7 @@ Mail::is_smime ()
       xfree (proto);
       xfree (ct);
     }
-  RELDISP (message);
+  gpgol_release (message);
   m_is_smime_checked  = true;
   return m_is_smime;
 }
index 6919b14..b376c53 100644 (file)
@@ -156,7 +156,7 @@ EVENT_SINK_INVOKE(MailItemEvents)
               draft_flags += 2;
             }
           set_gpgol_draft_info_flags (message, draft_flags);
-          RELDISP (message);
+          gpgol_release (message);
         }
       case BeforeRead:
         {
index e916209..25ef089 100644 (file)
@@ -1539,7 +1539,7 @@ resolve_ex_from_address (LPMESSAGE message)
                                MAPI_BEST_ACCESS,
                                &utype, (IUnknown**)&user);
     }
-  RELDISP (session);
+  gpgol_release (session);
 
   if (FAILED (hr))
     {
index ae6497c..e4cb7a4 100644 (file)
@@ -787,7 +787,7 @@ get_oom_context_window (LPDISPATCH context)
       log_debug ("%s:%s: Could not find active window",
                  SRCNAME, __func__);
     }
-  RELDISP (actExplorer);
+  gpgol_release (actExplorer);
   return ret;
 }
 
@@ -841,7 +841,7 @@ int set_pa_variant (LPDISPATCH pDisp, const char *dasl_id, VARIANT *value)
                                  DISPATCH_METHOD, &dispparams,
                                  &rVariant, &execpinfo, &argErr);
   SysFreeString (b_property);
-  RELDISP (propertyAccessor);
+  gpgol_release (propertyAccessor);
   if (hr != S_OK)
     {
       log_debug ("%s:%s: error: invoking SetProperty p=%p vt=%d"
@@ -909,7 +909,7 @@ int get_pa_variant (LPDISPATCH pDisp, const char *dasl_id, VARIANT *rVariant)
                                  DISPATCH_METHOD, &dispparams,
                                  rVariant, &execpinfo, &argErr);
   SysFreeString (b_property);
-  RELDISP (propertyAccessor);
+  gpgol_release (propertyAccessor);
   if (hr != S_OK)
     {
       log_debug ("%s:%s: error: invoking GetProperty p=%p vt=%d"
@@ -1114,7 +1114,7 @@ add_oom_attachment (LPDISPATCH disp, wchar_t* inFileW)
 
   SysFreeString (inFileB);
   VariantClear (&vtResult);
-  RELDISP (attachments);
+  gpgol_release (attachments);
 
   return hr == S_OK ? 0 : -1;
 }
index abf25f2..103b325 100644 (file)
@@ -394,7 +394,7 @@ gpgol_mailitem_revert (LPDISPATCH mailitem)
               if (!body)
                 {
                   log_error ("%s:%s: Error: %i", SRCNAME, __func__, __LINE__);
-                  RELDISP (attachment);
+                  gpgol_release (attachment);
                   goto done;
                 }
               log_debug ("%s:%s: Restoring pgp-body.",
@@ -403,7 +403,7 @@ gpgol_mailitem_revert (LPDISPATCH mailitem)
                 {
                   log_error ("%s:%s: Error: %i", SRCNAME, __func__, __LINE__);
                   xfree (body);
-                  RELDISP (attachment);
+                  gpgol_release (attachment);
                   goto done;
                 }
               body_restored = 1;
@@ -591,11 +591,11 @@ done:
 
   for (i = 0; i < del_cnt; i++)
     {
-      RELDISP (to_delete[i]);
+      gpgol_release (to_delete[i]);
     }
 
   xfree (to_delete);
-  RELDISP (attachments);
+  gpgol_release (attachments);
   xfree (msgcls);
 
   if (!result && finalize_mapi (message))
@@ -605,7 +605,7 @@ done:
       result = -1;
     }
 
-  RELDISP (message);
+  gpgol_release (message);
 
   return result;
 }
index c4f5c22..452aae6 100644 (file)
@@ -460,13 +460,13 @@ failure:
     log_debug ("%s:%s: failed rc=%d (%s) <%s>", SRCNAME, __func__, rc,
                gpg_strerror (rc), gpg_strsource (rc));
   engine_cancel (filter);
-  RELDISP(wordEditor);
-  RELDISP(application);
-  RELDISP(selection);
-  RELDISP(sender);
-  RELDISP(recipients);
-  RELDISP(mailItem);
-  RELDISP(tmpstream);
+  gpgol_release(wordEditor);
+  gpgol_release(application);
+  gpgol_release(selection);
+  gpgol_release(sender);
+  gpgol_release(recipients);
+  gpgol_release(mailItem);
+  gpgol_release(tmpstream);
   xfree (plaintext);
   xfree (senderAddr);
   if (recipientAddrs)
@@ -552,7 +552,7 @@ decryptAttachments (LPDISPATCH ctrl)
                                     DISPATCH_METHOD, &saveParams,
                                     NULL, NULL, NULL);
         SysFreeString (saveParams.rgvarg[0].bstrVal);
-        RELDISP (attachmentObj);
+        gpgol_release (attachmentObj);
         if (FAILED(hr))
           {
             int j;
@@ -560,11 +560,11 @@ decryptAttachments (LPDISPATCH ctrl)
                        SRCNAME, __func__, (unsigned int) hr);
             for (j = 0; j < i; j++)
               xfree (filenames[j]);
-            RELDISP (attachmentSelection);
+            gpgol_release (attachmentSelection);
             return hr;
           }
       }
-    RELDISP (attachmentSelection);
+    gpgol_release (attachmentSelection);
     err = op_assuan_start_decrypt_files (curWindow, filenames);
     for (i = 0; i < attachmentCount; i++)
       xfree (filenames[i]);
@@ -739,7 +739,7 @@ do_reader_action (LPDISPATCH ctrl, int flags)
           /* Not SMTP, fall back to try getting the property. */
           LPDISPATCH sender = get_oom_object (mailItem, "Sender");
           senderAddr = get_pa_string (sender, PR_SMTP_ADDRESS_DASL);
-          RELDISP (sender);
+          gpgol_release (sender);
         }
       xfree (addrType);
     }
@@ -749,7 +749,7 @@ do_reader_action (LPDISPATCH ctrl, int flags)
          in this case use the current address */
       LPDISPATCH sender = get_oom_object (mailItem, "Session.CurrentUser");
       senderAddr = get_pa_string (sender, PR_SMTP_ADDRESS_DASL);
-      RELDISP (sender);
+      gpgol_release (sender);
     }
 
   /* Determine the protocol based on the content */
@@ -894,10 +894,10 @@ do_reader_action (LPDISPATCH ctrl, int flags)
     log_debug ("%s:%s: failed rc=%d (%s) <%s>", SRCNAME, __func__, rc,
                gpg_strerror (rc), gpg_strsource (rc));
   engine_cancel (filter);
-  RELDISP (mailItem);
-  RELDISP (selection);
-  RELDISP (wordEditor);
-  RELDISP (wordApplication);
+  gpgol_release (mailItem);
+  gpgol_release (selection);
+  gpgol_release (wordEditor);
+  gpgol_release (wordApplication);
   xfree (encData);
   xfree (senderAddr);
   xfree (subject);
@@ -1204,9 +1204,9 @@ failure:
   xfree (fileToEncryptW);
   xfree (attachName);
   xfree (subject);
-  RELDISP (mailItem);
-  RELDISP (sender);
-  RELDISP (recipients);
+  gpgol_release (mailItem);
+  gpgol_release (sender);
+  gpgol_release (recipients);
 
   if (hFile)
     CloseHandle (hFile);
@@ -1331,9 +1331,9 @@ mark_mime_action (LPDISPATCH ctrl, int flags, bool is_explorer)
   rc = S_OK;
 
 done:
-  RELDISP (context);
-  RELDISP (mailitem);
-  RELDISP (message);
+  gpgol_release (context);
+  gpgol_release (mailitem);
+  gpgol_release (message);
 
   return rc;
 }
@@ -1395,9 +1395,9 @@ HRESULT get_crypt_pressed (LPDISPATCH ctrl, int flags, VARIANT *result,
                                                         VARIANT_FALSE;
 
 done:
-  RELDISP (context);
-  RELDISP (mailitem);
-  RELDISP (message);
+  gpgol_release (context);
+  gpgol_release (mailitem);
+  gpgol_release (message);
 
   return S_OK;
 }
@@ -1471,9 +1471,9 @@ HRESULT get_crypt_status (LPDISPATCH ctrl, int flags, VARIANT *result)
     }
 
 done:
-  RELDISP (context);
-  RELDISP (mailitem);
-  RELDISP (message);
+  gpgol_release (context);
+  gpgol_release (mailitem);
+  gpgol_release (message);
 
   return S_OK;
 }
index c8a44db..6eccb35 100644 (file)
@@ -96,6 +96,15 @@ void log_window_hierarchy (HWND window, const char *fmt,
 
 #define log_oom if (opt.enable_debug & DBG_OOM) log_debug
 #define log_oom_extra if (opt.enable_debug & DBG_OOM_EXTRA) log_debug
+#define gpgol_release(X) \
+  if (X && opt.enable_debug & DBG_OOM_EXTRA) \
+    { \
+      log_debug ("Releasing: %p \n", X); \
+      log_debug ("%s:%s: Object: %p released ref: %lu \n", \
+                 SRCNAME, __func__, X, X->Release()); \
+    } \
+  else if (X) \
+    X->Release();
 
 const char *log_srcname (const char *s);
 #define SRCNAME log_srcname (__FILE__)