@@ -1068,7 +1068,7 @@ free_all_mem(void)
10681068
10691069 /* Close all tabs and windows. Reset 'equalalways' to avoid redraws. */
10701070 p_ea = FALSE;
1071- if (first_tabpage -> tp_next != NULL )
1071+ if (first_tabpage != NULL && first_tabpage -> tp_next != NULL )
10721072 do_cmdline_cmd ((char_u * )"tabonly!" );
10731073 if (!ONE_WINDOW )
10741074 do_cmdline_cmd ((char_u * )"only!" );
@@ -1085,29 +1085,33 @@ free_all_mem(void)
10851085 // Clear user commands (before deleting buffers).
10861086 ex_comclear (NULL );
10871087
1088+ // When exiting from mainerr_arg_missing curbuf has not been initialized,
1089+ // and not much else.
1090+ if (curbuf != NULL )
1091+ {
10881092# ifdef FEAT_MENU
1089- /* Clear menus. */
1090- do_cmdline_cmd ((char_u * )"aunmenu *" );
1093+ // Clear menus.
1094+ do_cmdline_cmd ((char_u * )"aunmenu *" );
10911095# ifdef FEAT_MULTI_LANG
1092- do_cmdline_cmd ((char_u * )"menutranslate clear" );
1096+ do_cmdline_cmd ((char_u * )"menutranslate clear" );
10931097# endif
10941098# endif
1095-
1096- /* Clear mappings, abbreviations, breakpoints. */
1097- do_cmdline_cmd ((char_u * )"lmapclear" );
1098- do_cmdline_cmd ((char_u * )"xmapclear" );
1099- do_cmdline_cmd ((char_u * )"mapclear" );
1100- do_cmdline_cmd ((char_u * )"mapclear!" );
1101- do_cmdline_cmd ((char_u * )"abclear" );
1099+ // Clear mappings, abbreviations, breakpoints.
1100+ do_cmdline_cmd ((char_u * )"lmapclear" );
1101+ do_cmdline_cmd ((char_u * )"xmapclear" );
1102+ do_cmdline_cmd ((char_u * )"mapclear" );
1103+ do_cmdline_cmd ((char_u * )"mapclear!" );
1104+ do_cmdline_cmd ((char_u * )"abclear" );
11021105# if defined(FEAT_EVAL )
1103- do_cmdline_cmd ((char_u * )"breakdel *" );
1106+ do_cmdline_cmd ((char_u * )"breakdel *" );
11041107# endif
11051108# if defined(FEAT_PROFILE )
1106- do_cmdline_cmd ((char_u * )"profdel *" );
1109+ do_cmdline_cmd ((char_u * )"profdel *" );
11071110# endif
11081111# if defined(FEAT_KEYMAP )
1109- do_cmdline_cmd ((char_u * )"set keymap=" );
1112+ do_cmdline_cmd ((char_u * )"set keymap=" );
11101113#endif
1114+ }
11111115
11121116# ifdef FEAT_TITLE
11131117 free_titles ();
@@ -1142,7 +1146,8 @@ free_all_mem(void)
11421146 set_expr_line (NULL );
11431147# endif
11441148# ifdef FEAT_DIFF
1145- diff_clear (curtab );
1149+ if (curtab != NULL )
1150+ diff_clear (curtab );
11461151# endif
11471152 clear_sb_text (TRUE); /* free any scrollback text */
11481153
@@ -1172,17 +1177,18 @@ free_all_mem(void)
11721177 tabpage_T * tab ;
11731178
11741179 qf_free_all (NULL );
1175- /* Free all location lists */
1180+ // Free all location lists
11761181 FOR_ALL_TAB_WINDOWS (tab , win )
11771182 qf_free_all (win );
11781183 }
11791184#endif
11801185
1181- /* Close all script inputs. */
1186+ // Close all script inputs.
11821187 close_all_scripts ();
11831188
1184- /* Destroy all windows. Must come before freeing buffers. */
1185- win_free_all ();
1189+ if (curwin != NULL )
1190+ // Destroy all windows. Must come before freeing buffers.
1191+ win_free_all ();
11861192
11871193 /* Free all option values. Must come after closing windows. */
11881194 free_all_options ();
@@ -1223,8 +1229,11 @@ free_all_mem(void)
12231229
12241230 reset_last_sourcing ();
12251231
1226- free_tabpage (first_tabpage );
1227- first_tabpage = NULL ;
1232+ if (first_tabpage != NULL )
1233+ {
1234+ free_tabpage (first_tabpage );
1235+ first_tabpage = NULL ;
1236+ }
12281237
12291238# ifdef UNIX
12301239 /* Machine-specific free. */
0 commit comments