segfault when closing gedit and not saving changes
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Awn |
Fix Released
|
Medium
|
Unassigned |
Bug Description
I am using Ubuntu 7.10. This seems to affect all branches, as it is reproducible for me in libawn-
To reproduce:
1) Launch AWN
2) Launch gedit (I did it via Alt+F2, typing gedit, and hitting Enter)
3) Type anything, then hit Alt+F4 to close. A dialog will appear asking about saving. Select "Close without Saving".
4) The gedit icon will disappear and as soon as it does, bam, segfault.
Here is some hopefully useful information:
(avant-
(avant-
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1227069776 (LWP 21354)]
0x080570aa in _task_wnck_
764 awn_title_hide (AWN_TITLE(
(gdb) <gtk.gdk.Pixbuf object at 0x82c4194 (GdkPixbuf at 0x83ac658)>
<gtk.gdk.Pixbuf object at 0x82c4194 (GdkPixbuf at 0x83acb58)>
bt
#0 0x080570aa in _task_wnck_
#1 0xb74248d6 in ?? () from /usr/lib/
#2 0x08295318 in ?? ()
#3 0xb72c78ac in __pthread_
from /lib/tls/
#4 0xb742411c in g_main_
#5 0xb742755f in ?? () from /usr/lib/
#6 0x0808b748 in ?? ()
#7 0x00000000 in ?? ()
Related branches
Changed in awn: | |
importance: | Undecided → Medium |
status: | New → Fix Committed |
The following is a patch by moonbeam (formatting changes by me) with a brief description by its author (paraphrased):
The patch keeps _shrink_widget() from proceeding with the destruction of task if there is a timer attached to _task_wnck_ name_hide( ) for that task. Once timer_count is 0, it is safe to remove the task. It could just be a boolean flag, but I'm not sure if it might not be needed for other things. Before adding a timer for a task, it gets incremented. When the timer gets killed, the function decrements it. As it's currently written, I could just make it a boolean and set it to TRUE before attaching the timer and then set it to falls in the callback. But, there are enough timers in that code that I'm thinking that something similar might be needed in other places.