summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukas Fleischer <lfleischer@calcurse.org>2016-02-15 18:59:23 +0100
committerLukas Fleischer <lfleischer@calcurse.org>2016-02-15 19:03:26 +0100
commitfeb059e8cff5fd1057faf88caa127623e35775d2 (patch)
treeeb06367415191e072cd95506e47f321a3bf25c42
parenteaf8f96e065ef30fb78ead5cf1e4007aefd25fbf (diff)
downloadcalcurse-feb059e8cff5fd1057faf88caa127623e35775d2.tar.gz
calcurse-feb059e8cff5fd1057faf88caa127623e35775d2.zip
Fix segmentation fault on reload with pre-load hook
We need to manually force a reinitialization of the todo item list box before reloading the items. Otherwise, the list box contains dangling references to the linked list of todo items which has already been cleared at this point. After the pre-load hook is called, the windows are redrawn by wins_unprepare_external() and these invalid references are accessed, leading to a segmentation fault. Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
-rw-r--r--src/io.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/io.c b/src/io.c
index f9e98ae..e0a8502 100644
--- a/src/io.c
+++ b/src/io.c
@@ -857,6 +857,14 @@ void io_reload_data(void)
recur_event_llist_init();
todo_init_list();
+ /*
+ * Temporarily reinitialize the todo list box without any items to make
+ * sure wins_unprepare_external() does not fail when it is called after
+ * executing the pre-load hook.
+ */
+ ui_todo_load_items();
+ ui_todo_sel_reset();
+
io_load_data(NULL);
io_unset_modified();
ui_todo_load_items();