Mail Archives: geda-help/2021/03/02/13:51:57
--B4IIlcmfBL/1gGOG
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Hi Karl,
karl AT aspodata DOT se [via geda-help AT delorie DOT com] wrote:
> > Does the reverse situation ever happen? Ie. that the system-installed
> > version segfaults, but a version in /usr/local works?
>
> Not what I can remember, not sure.
That's good news.
> > And would you be willing to download the 1.10.2 tarball and see if
> > that behaves the same as git master when built and installed into
> > /usr/local ?
>
> Using
> http://ftp.geda-project.org/geda-gaf/stable/v1.10/1.10.2/geda-gaf-1.10.2.tar.gz
..
> $ /usr/local/bin/gschem
>
> (gschem:14119): Gdk-CRITICAL **: 16:37:04.872: IA__gdk_drawable_get_size: assertion 'GDK_IS_DRAWABLE (drawable)' failed
This is an interesting message. The called function, gdk_drawable_get_size()
is deprecated in GDK 2.24 according to comments in the two places where
gschem calls it. I guess it's planned to replace that code in gschem,
but for now if that code is only about the size of some part of the
window then it shouldn't matter much, or at least not cause a crash.
Also, this message doesn't always appear, so let's ignore it for now.
What's your gtk version? You can check with emerge or:
echo /var/db/pkg/*/gtk+*
I suspect that these problems started after an upgrade of gtk+-2.
> (gschem:14119): Gdk-CRITICAL **: 16:37:04.872: IA__gdk_cairo_create: assertion 'GDK_IS_DRAWABLE (drawable)' failed
> Segmentation fault (core dumped)
> $ /usr/local/bin/gschem regulator.sch
>
> (gschem:14432): Gdk-CRITICAL **: 16:38:05.293: IA__gdk_cairo_create: assertion 'GDK_IS_DRAWABLE (drawable)' failed
> Segmentation fault (core dumped)
So as an experiment I've created the attached patch. I don't believe
that it's a final solution, but it might provide some useful information.
Please apply it onto the 1.10.2 source and let's see what happens when
starting gschem then:
cd geda-gaf-1.10.2
patch -p0 < /tmp/geda-gaf-1.10.2-text-drawable.patch
make install
/usr/local/bin/gschem
> ** (gschem:16751): CRITICAL **: 16:45:46.738: gschem_page_geometry_set_values: assertion 'screen_width > 0' failed
This makes sense, because the gschem code expects screen_width to have
been set by the call to gdk_drawable_get_size() above - since that call
failed the width is still 0. This leads me to think about division by
zero, and there are a few places with such candidates, however then I
would have expected a SIGFPE or SIGBUS signal, not SIGSEGV.
> Btw, the main window (I guess) is mapped, and then immediately (it
> feels like 1/3 of a second) unmapped.
Good to know that the window appears briefly - this is certainly
something going wrong with startup.
//Peter
--B4IIlcmfBL/1gGOG
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="geda-gaf-1.10.2-text-drawable.patch"
--- gschem/src/o_text.c.orig 2020-12-17 15:33:15.000000000 +0100
+++ gschem/src/o_text.c 2021-03-02 19:32:03.105846702 +0100
@@ -41,6 +41,7 @@
int *max_x, int *max_y)
{
TOPLEVEL *toplevel;
+ GdkWidget *window;
EdaRenderer *renderer;
cairo_t *cr;
cairo_matrix_t render_mtx;
@@ -55,7 +56,12 @@
toplevel = gschem_toplevel_get_toplevel (w_current);
g_return_val_if_fail ((toplevel != NULL), FALSE);
- cr = gdk_cairo_create (gtk_widget_get_window (GTK_WIDGET(page_view)));
+ window = gtk_widget_get_window (GTK_WIDGET(page_view));
+ g_return_val_if_fail ((window != NULL), FALSE);
+ g_return_val_if_fail (GDK_IS_DRAWABLE(window), FALSE);
+
+ cr = gdk_cairo_create (window);
+ g_return_val_if_fail ((cr != NULL), FALSE);
/* Set up renderer based on configuration in w_current. Note that we
* *don't* enable hinting, because if its enabled the calculated
--B4IIlcmfBL/1gGOG--
- Raw text -