@@ -863,7 +863,7 @@ void free_all_mem(void)
863863
864864 // Close all tabs and windows. Reset 'equalalways' to avoid redraws.
865865 p_ea = false;
866- if (first_tabpage -> tp_next != NULL ) {
866+ if (first_tabpage != NULL && first_tabpage -> tp_next != NULL ) {
867867 do_cmdline_cmd ("tabonly!" );
868868 }
869869
@@ -873,18 +873,20 @@ void free_all_mem(void)
873873 // Clear user commands (before deleting buffers).
874874 ex_comclear (NULL );
875875
876- // Clear menus.
877- do_cmdline_cmd ("aunmenu *" );
878- do_cmdline_cmd ("tlunmenu *" );
879- do_cmdline_cmd ("menutranslate clear" );
876+ if (curbuf != NULL ) {
877+ // Clear menus.
878+ do_cmdline_cmd ("aunmenu *" );
879+ do_cmdline_cmd ("tlunmenu *" );
880+ do_cmdline_cmd ("menutranslate clear" );
880881
881- // Clear mappings, abbreviations, breakpoints.
882- // NB: curbuf not used with local=false arg
883- map_clear_mode (curbuf , MAP_ALL_MODES , false, false);
884- map_clear_mode (curbuf , MAP_ALL_MODES , false, true);
885- do_cmdline_cmd ("breakdel *" );
886- do_cmdline_cmd ("profdel *" );
887- do_cmdline_cmd ("set keymap=" );
882+ // Clear mappings, abbreviations, breakpoints.
883+ // NB: curbuf not used with local=false arg
884+ map_clear_mode (curbuf , MAP_ALL_MODES , false, false);
885+ map_clear_mode (curbuf , MAP_ALL_MODES , false, true);
886+ do_cmdline_cmd ("breakdel *" );
887+ do_cmdline_cmd ("profdel *" );
888+ do_cmdline_cmd ("set keymap=" );
889+ }
888890
889891 free_titles ();
890892 free_findfile ();
@@ -905,7 +907,9 @@ void free_all_mem(void)
905907 free_cd_dir ();
906908 free_signs ();
907909 set_expr_line (NULL );
908- diff_clear (curtab );
910+ if (curtab != NULL ) {
911+ diff_clear (curtab );
912+ }
909913 clear_sb_text (true); // free any scrollback text
910914
911915 // Free some global vars.
@@ -922,8 +926,10 @@ void free_all_mem(void)
922926 // Close all script inputs.
923927 close_all_scripts ();
924928
925- // Destroy all windows. Must come before freeing buffers.
926- win_free_all ();
929+ if (curwin != NULL ) {
930+ // Destroy all windows. Must come before freeing buffers.
931+ win_free_all ();
932+ }
927933
928934 // Free all option values. Must come after closing windows.
929935 free_all_options ();
@@ -957,8 +963,10 @@ void free_all_mem(void)
957963
958964 reset_last_sourcing ();
959965
960- free_tabpage (first_tabpage );
961- first_tabpage = NULL ;
966+ if (first_tabpage != NULL ) {
967+ free_tabpage (first_tabpage );
968+ first_tabpage = NULL ;
969+ }
962970
963971 // message history
964972 msg_hist_clear (0 );
0 commit comments