Comment 31 for bug 131227

Revision history for this message
Antonio Litterio (antonio-litterio-gmail) wrote :

Ok, look at this solution...I had to add a new function used to destroy properly notification gtk_widget (nw) and engine.
I noticed that the problem was in an uncorrected closure of a G_Modules after the destruction of the widget.
Practically the daemon destroys engine, in particular "engine->module", when it is already used by the notification pop-up.
The correct way to destroy engine is this:
 -) Destroy notification pop-up by calling "gtk_distroy_widget".
 -) Decrease value of "engine->ref_count" and if it is equal to zero, unload engine->module and destroy engine.

Currently the daemon works in this modality:
 -) It calls the invokes the destruction of a notification pop-up by calling "gtk_destroy_widget", but with this event is also called "theme_engine_unref".
 -) It decreases value of "engine->ref_count" and if it is equal to zero, it unloads "engine->module" and destroys "engine".
 -) It ends the destruction of a notification pop-up.

The daemon unloads engine->module when it is still in use by gtk_widget. I wrote the function that follows the correct way for to destroy widget and eventually engine.
This function, called theme_destroy_widget, will be called in daemon.c when it is requested the destruction of widget in function _notify_timeout_destroy.