Correctly unref widget_nodes
commit8c0a83f5ca6607afc26447b00c0b227a3571a2ff
authorUli Schlachter <psychon@znc.in>
Fri, 17 Sep 2010 13:45:24 +0000 (17 15:45 +0200)
committerUli Schlachter <psychon@znc.in>
Fri, 17 Sep 2010 13:49:20 +0000 (17 15:49 +0200)
treea3f265aeb3b2655853e802d72975c055d25986e6
parent222fb4c9c5e3190c86d3a988b23cd3c9ef6400df
Correctly unref widget_nodes

While drawing the wibox, the C core builds up a list of widgets and their
associated geometry. This list consists of widget_node_t objects and is
constructed like this (This is from luaA_table2widgets()):

   widget_node_t w;
   p_clear(&w, 1);
   w.widget = luaA_object_ref_item(L, idx, -1);
   widget_node_array_append(widgets, w);

After we are done with this list of widget nodes, it is freed via
wibox_widget_node_array_wipe(). However, wibox_widget_node_array_wipe() passed
"&w" to luaA_object_unref_item() while it should have used "w.widget" (which is
what was returned from luaA_object_ref_item()). This made the unref fail and the
wibox was carrying around a reference to this widget forever. This was
effectively a memory leak.

Signed-off-by: Uli Schlachter <psychon@znc.in>
wibox.c