strange gtk_set_data_full behavior ...



hello, ...

i think i did found a bug in glib, don't know where to report it, so i will
write here.

i do the following :

char data1[] = "Hello";
char data2[] = "Bye";
char data3[] = "XXX";
void sven_free (gpointer data)
{
  printf ("Hello you %u.\n", data);
  printf ("Data is %s.\n", data);
}

...

  printf ("Data1 = %u.\n", data1);
  printf ("Data2 = %u.\n", data2);
  printf ("Data3 = %u.\n", data3);
  gtk_object_set_data_full (GTK_OBJECT (drawing_area), "Sven_data",\
    (gpointer)data1, (GtkDestroyNotify)&sven_free);
  gtk_object_set_data_full (GTK_OBJECT (drawing_area), "Sven_data",\
    (gpointer)data2, (GtkDestroyNotify)&sven_free);
  gtk_object_set_data_full (GTK_OBJECT (drawing_area), "Sven_data",\
    (gpointer)data3, (GtkDestroyNotify)&sven_free);
  gtk_object_set_data_full (GTK_OBJECT (drawing_area), "Sven_data",\
    (gpointer)NULL, (GtkDestroyNotify)&sven_free);

and get the following output :

Data1 = 138616.
Data2 = 138624.
Data3 = 138632.
Hello you 138616.
Data is Hello.
Hello you 138624.
Data is Bye.

GLib-CRITICAL **: file gdataset.c: line 349 (g_datalist_id_set_data_full):
assertion `destroy_func == NULL' failed.

So: 

1) sven_free does not get called when i exit the application (is it a modified
   scribble-simple, i quit hitting the Quit button who has a
   gtk_widget_destroy callback fixed to it.

2) the last call to gtk_object_set_data_full should free the data, and is
   perfectly legal, or at least the tutorial and the header file claims so, but
	does no such thing, and i get an error about NULL destroy function.
	
Friendly,

Sven LUTHER



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]