ports/155255: comms/xnecview crashes with Gdk-CRITICAL error

Tom Russo russo at bogodyn.org
Fri Mar 4 08:40:11 UTC 2011


>Number:         155255
>Category:       ports
>Synopsis:       comms/xnecview crashes with Gdk-CRITICAL error
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Mar 04 08:40:10 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator:     Tom Russo
>Release:        FreeBSD 7.4-PRERELEASE
>Organization:
>Environment:
FreeBSD bogodyn.org 7.4-PRERELEASE FreeBSD 7.4-PRERELEASE #0: Sat Jan  1 21:48:22 MST 2011     russo at bogodyn.org:/users2/obj/usr/src/sys/BOGODYN  i386

>Description:
Some time ago xnecview, which I used to use regularly on this system, after some upgrade or other started crashing with the error:

(xnecview:77768): Gdk-CRITICAL **: IA__gdk_window_set_back_pixmap: assertion `pixmap == NULL || gdk_drawable_get_depth (window) == gdk_drawable_get_depth (pixmap)' failed

This is repeatable on any NEC output, including old NEC output I had lying around from the days when I used xnecview regularly.
>How-To-Repeat:
Run xnecview on any valid NEC input file, such as
----CUT-----
CM EXAMPLE 3. VERTICAL HALF WAVELENGTH ANTENNA OVER GROUND
CM EXTENDED THIN WIRE KERNEL USED
CM 1. PERFECT GROUND
CM with phased vertical some distance away
CE PATTERN CALCULATIONS
GW 0 9 0.0 0.0 2.0 0.0 0.0 7.0 0.00051
GW 1 9 2.5 0.0 2.0 2.5 0.0 7.0 0.00051
GE 0
EX 0 0 5 0 1.0 0.0 0.0 0.0
EX 0 1 5 0 -1.0 1.e-16 0.0 0.0
GN 2 0 0 0 13.0 .002 0.0 0.0
FR 0 1 0 0 30.0 0.0 0.0 0.0
EN
-----CUT------

The program will put up a blank window, and will crash if any interaction is attempted.

>Fix:
The attached patch fixes the issue.  It is taken from a Debian bug fix I found in their bug tracker, dated 2008:

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=484725

This patch completely fixes the issue I have observed, and all my old NEC files (including the one in the "How To Repeat" section above) are viewable after the patch.


Patch attached with submission follows:

commit 02352e102c1913dc232500c7fd80b3947a8593ea
Author: Diego Ongaro <ongardie at gmail.com>
Date:   Sun Jun 29 00:30:09 2008 +0100

    remove depth

diff --git a/xwin.c b/xwin.c
index 31d3cf2..4011c16 100644
--- xwin.c
+++ xwin.c
@@ -39,7 +39,6 @@ GtkLabel *msgwidget;     /* label widget in top right corner, used for several m
 int fontheight;
 GdkPixmap *gbackg2=NULL;      /* for window2, we draw into this pixmap */
 GdkColormap *gcm;
-int depth;
 
 int redraw=1;        /* flag which signifies need for redrawing of struct/gain plot */
 int dragging=0;      /* flag to indicate that user is dragging the struct/gain plot */
@@ -360,7 +359,7 @@ gint resize_event(GtkWidget *w,GdkEventConfigure *ev,gpointer dummy)
    winsizex=ev->width;
    winsizey=ev->height;
    gdk_pixmap_unref(gbackg);
-   gbackg=gdk_pixmap_new(w->window,winsizex,winsizey,depth);
+   gbackg=gdk_pixmap_new(w->window,winsizex,winsizey,gdk_drawable_get_depth(w->window));
    calcproj();
    redraw=1;
 #if 0
@@ -876,7 +875,7 @@ gint resize_event2(GtkWidget *w,GdkEventConfigure *ev,gpointer dummy)
    win2sizex=ev->width;
    win2sizey=ev->height;
    gdk_pixmap_unref(gbackg2);
-   gbackg2=gdk_pixmap_new(w->window,win2sizex,win2sizey,depth);
+   gbackg2=gdk_pixmap_new(w->window,win2sizex,win2sizey,gdk_drawable_get_depth(w->window));
 
    redraw2=1;
    return TRUE;
@@ -1035,10 +1034,12 @@ void cmd_setZ0(GtkEntry *w)
 
 void getcolor(char *name,GdkColor *xc)
 {
+#if 0
    if (depth==1) {          /* on 1bpp displays, choose black for everything except the background */
       if (strcmp(name,C_BG)) name="black";
       else name="white";
    }
+#endif
    gdk_color_parse(name,xc);
    if (!gdk_colormap_alloc_color(gcm,xc,TRUE,FALSE)) {
       /* if allocation failed, use black */
@@ -1210,7 +1211,9 @@ void maininitX(int really)
    {
       GdkVisual *vi;
       vi = gdk_visual_get_best();
+#if 0
       depth=vi->depth;
+#endif
       gcm=gdk_colormap_new(vi,FALSE);
    }
 
@@ -1386,7 +1389,7 @@ void maininitX(int really)
          winsizex=toprow->requisition.width;
          calcproj();
       }
-      gbackg=gdk_pixmap_new(w->window,winsizex,winsizey,depth);
+      gbackg=gdk_pixmap_new(w->window,winsizex,winsizey,gdk_drawable_get_depth(w->window));
 
       upd_msg();
 
@@ -1482,7 +1485,7 @@ void maininitX(int really)
 
       ggc2 = gdk_gc_new(w->window);
 
-      gbackg2=gdk_pixmap_new(w->window,win2sizex,win2sizey,depth);
+      gbackg2=gdk_pixmap_new(w->window,win2sizex,win2sizey,gdk_drawable_get_depth(w->window));
 
       gtk_signal_connect( GTK_OBJECT(w), "expose_event", GTK_SIGNAL_FUNC(expose_event2), NULL);
 


>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list