[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#7690: 23.2; lwlib-Xm.c
From: |
weme24 |
Subject: |
bug#7690: 23.2; lwlib-Xm.c |
Date: |
Mon, 20 Dec 2010 20:41:19 +0100 |
While using ispell-buffer my Emacs crashed. After examining the
core-dump I found the following:
in lwlib/lwlib-Xm.c
when val->contens=0
------------------------------------------------------------
static void
xm_update_menu (widget_instance* instance,
Widget widget,
widget_value* val,
Boolean deep_p)
{
Widget* children;
unsigned int num_children;
int num_children_to_keep = 0;
int i;
widget_value* cur;
children = XtCompositeChildren (widget, &num_children);
/* Widget is a RowColumn widget whose contents have to be updated
* to reflect the list of items in val->contents */
/* See how many buttons we can keep, and how many we
must completely replace. */
if (val->contents == 0)
num_children_to_keep = 0;
else if (val->contents->change == STRUCTURAL_CHANGE)
{
if (children)
{
for (i = 0, cur = val->contents;
(i < num_children
&& cur); /* how else to ditch unwanted children ?? - mgd */
i++, cur = cur->next)
{
if (cur->this_one_change == STRUCTURAL_CHANGE)
break;
}
num_children_to_keep = i;
}
}
else
num_children_to_keep = num_children;
/* Update all the buttons of the RowColumn, in order,
except for those we are going to replace entirely. */
if (children)
{
for (i = 0, cur = val->contents; i < num_children_to_keep; i++)
{
if (!cur)
{
num_children_to_keep = i;
break;
}
if (children [i]->core.being_destroyed
|| strcmp (XtName (children [i]), cur->name))
continue;
update_one_menu_entry (instance, children [i], cur, deep_p);
cur = cur->next;
}
}
/* Now replace from scratch all the buttons after the last
place that the top-level structure changed. */
if (val->contents->change == STRUCTURAL_CHANGE) <-- CRASH !!!!
{
destroy_all_children (widget, num_children_to_keep);
make_menu_in_widget (instance, widget, val->contents,
num_children_to_keep);
}
XtFree ((char *) children);
}
------------------------------------------------------------
So I wrote a quick workaround:
------------------------------------------------------------
--- emacs-23.2/lwlib/lwlib-Xm.c.org 2010-12-16 22:45:47.000000000 +0100
+++ emacs-23.2/lwlib/lwlib-Xm.c 2010-12-16 22:47:11.000000000 +0100
@@ -825,7 +825,7 @@
/* Now replace from scratch all the buttons after the last
place that the top-level structure changed. */
- if (val->contents->change == STRUCTURAL_CHANGE)
+ if (val->contents && val->contents->change == STRUCTURAL_CHANGE)
{
destroy_all_children (widget, num_children_to_keep);
make_menu_in_widget (instance, widget, val->contents,
------------------------------------------------------------
That fixed the problem for me
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- bug#7690: 23.2; lwlib-Xm.c,
weme24 <=