}
\f/* creation functions */
+
static Widget
xlw_create_menubar (instance)
widget_instance* instance;
{
Widget widget;
- widget_value *tem = (widget_value *) XtMalloc (sizeof (widget_value));
+ widget_value *tem = malloc_widget_value ();
/* _XtCreate is freeing the object we passed,
so make a copy that we free later. */
XtNmenu, tem,
0);
- XtFree (tem);
+ free_widget_value (tem);
XtAddCallback (widget, XtNopen, pre_hook, (XtPointer)instance);
XtAddCallback (widget, XtNselect, pick_hook, (XtPointer)instance);
Widget widget;
- widget_value *tem = (widget_value *) XtMalloc (sizeof (widget_value));
+ widget_value *tem = malloc_widget_value ();
/* _XtCreate is freeing the object we passed,
so make a copy that we free later. */
XtNhorizontal, False,
0);
- XtFree (tem);
+ free_widget_value (tem);
XtAddCallback (widget, XtNselect, pick_hook, (XtPointer)instance);
}
static widget_value *widget_value_free_list = 0;
+static int malloc_cpt = 0;
+static int malloc_cpt_id = 0;
widget_value *
malloc_widget_value ()
else
{
wv = (widget_value *) malloc (sizeof (widget_value));
+ malloc_cpt++;
}
memset (wv, 0, sizeof (widget_value));
return wv;
{
if (wv->free_list)
abort ();
- wv->free_list = widget_value_free_list;
- widget_value_free_list = wv;
+
+ if (malloc_cpt > 20)
+ {
+ /* When the number of already allocated cells is too big,
+ We free it. */
+ malloc_cpt_id++;
+ free (wv);
+ if (malloc_cpt_id > 20)
+ {
+ malloc_cpt_id = 0;
+ malloc_cpt = 0;
+ }
+ }
+ else
+ {
+ wv->free_list = widget_value_free_list;
+ widget_value_free_list = wv;
+ }
}
static void