[gimp/gimp-2-10] app: more GimpBacktrace tidying
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/gimp-2-10] app: more GimpBacktrace tidying
- Date: Wed, 12 Sep 2018 11:55:03 +0000 (UTC)
commit 06a22a9cf8f30b7e0a584d290bf0fed66b4e0443
Author: Ell <ell_se yahoo com>
Date: Mon Sep 3 15:29:20 2018 -0400
app: more GimpBacktrace tidying
... in preparation for the Windows backend.
(cherry picked from commit 422f6a55e4d478d667ef5dc4b05122a2d2abb7e4)
app/app.c | 7 +++++++
app/core/gimpbacktrace-linux.c | 13 +++++++++----
app/core/gimpbacktrace-none.c | 15 +++++++++------
app/core/gimpbacktrace.h | 7 +++++--
app/widgets/gimpdashboard.c | 10 +++++-----
5 files changed, 35 insertions(+), 17 deletions(-)
---
diff --git a/app/app.c b/app/app.c
index 81e6bdc503..f567629029 100644
--- a/app/app.c
+++ b/app/app.c
@@ -56,6 +56,7 @@
#include "core/gimp.h"
#include "core/gimp-batch.h"
#include "core/gimp-user-install.h"
+#include "core/gimpbacktrace.h"
#include "core/gimpimage.h"
#include "file/file-open.h"
@@ -212,6 +213,12 @@ app_run (const gchar *full_prog_name,
filenames = NULL;
}
+ /* Initialize GimpBacktrace early on. In particular, we want the
+ * Windows backend to catch the SET_THREAD_NAME exceptions of newly
+ * created threads.
+ */
+ gimp_backtrace_init ();
+
/* Language needs to be determined first, before any GimpContext is
* instantiated (which happens when the Gimp object is created)
* because its properties need to be properly localized in the
diff --git a/app/core/gimpbacktrace-linux.c b/app/core/gimpbacktrace-linux.c
index ea73b2bde3..9e4f38d12b 100644
--- a/app/core/gimpbacktrace-linux.c
+++ b/app/core/gimpbacktrace-linux.c
@@ -24,6 +24,8 @@
#include "config.h"
+#include <gio/gio.h>
+
#include "gimpbacktrace-backend.h"
@@ -46,8 +48,6 @@
#include <libunwind.h>
#endif
-#include <gio/gio.h>
-
#include "core-types.h"
#include "gimpbacktrace.h"
@@ -237,8 +237,13 @@ gimp_backtrace_signal_handler (gint signum)
/* public functions */
-gboolean
+void
gimp_backtrace_init (void)
+{
+}
+
+gboolean
+gimp_backtrace_start (void)
{
g_mutex_lock (&mutex);
@@ -294,7 +299,7 @@ gimp_backtrace_init (void)
}
void
-gimp_backtrace_shutdown (void)
+gimp_backtrace_stop (void)
{
g_return_if_fail (n_initializations > 0);
diff --git a/app/core/gimpbacktrace-none.c b/app/core/gimpbacktrace-none.c
index c2c9d758ee..489a63c7fe 100644
--- a/app/core/gimpbacktrace-none.c
+++ b/app/core/gimpbacktrace-none.c
@@ -21,16 +21,14 @@
#include "config.h"
+#include <gio/gio.h>
+
#include "gimpbacktrace-backend.h"
#ifdef GIMP_BACKTRACE_BACKEND_NONE
-#include "config.h"
-
-#include <gio/gio.h>
-
#include "core-types.h"
#include "gimpbacktrace.h"
@@ -39,14 +37,19 @@
/* public functions */
-gboolean
+void
gimp_backtrace_init (void)
+{
+}
+
+gboolean
+gimp_backtrace_start (void)
{
return FALSE;
}
void
-gimp_backtrace_shutdown (void)
+gimp_backtrace_stop (void)
{
}
diff --git a/app/core/gimpbacktrace.h b/app/core/gimpbacktrace.h
index 64c7bc3519..ea676a2db5 100644
--- a/app/core/gimpbacktrace.h
+++ b/app/core/gimpbacktrace.h
@@ -28,13 +28,16 @@ typedef struct _GimpBacktraceAddressInfo GimpBacktraceAddressInfo;
struct _GimpBacktraceAddressInfo
{
gchar object_name[256];
+
gchar symbol_name[256];
guintptr symbol_address;
};
-gboolean gimp_backtrace_init (void);
-void gimp_backtrace_shutdown (void);
+void gimp_backtrace_init (void);
+
+gboolean gimp_backtrace_start (void);
+void gimp_backtrace_stop (void);
GimpBacktrace * gimp_backtrace_new (gboolean include_current_thread);
void gimp_backtrace_free (GimpBacktrace *backtrace);
diff --git a/app/widgets/gimpdashboard.c b/app/widgets/gimpdashboard.c
index 09b7287769..ff4bd66a02 100644
--- a/app/widgets/gimpdashboard.c
+++ b/app/widgets/gimpdashboard.c
@@ -4145,7 +4145,7 @@ gimp_dashboard_log_start_recording (GimpDashboard *dashboard,
priv->log_include_backtrace = FALSE;
if (priv->log_include_backtrace)
- has_backtrace = gimp_backtrace_init ();
+ has_backtrace = gimp_backtrace_start ();
else
has_backtrace = FALSE;
@@ -4213,7 +4213,7 @@ gimp_dashboard_log_start_recording (GimpDashboard *dashboard,
if (priv->log_error)
{
- gimp_backtrace_shutdown ();
+ gimp_backtrace_stop ();
g_clear_object (&priv->log_output);
@@ -4263,9 +4263,6 @@ gimp_dashboard_log_stop_recording (GimpDashboard *dashboard,
g_mutex_lock (&priv->mutex);
- if (priv->log_include_backtrace)
- gimp_backtrace_shutdown ();
-
gimp_dashboard_log_printf (dashboard,
"\n"
"</samples>\n");
@@ -4290,6 +4287,9 @@ gimp_dashboard_log_stop_recording (GimpDashboard *dashboard,
"\n"
"</gimp-performance-log>\n");
+ if (priv->log_include_backtrace)
+ gimp_backtrace_stop ();
+
if (! priv->log_error)
g_output_stream_close (priv->log_output, NULL, &priv->log_error);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]