Skip to content

Commit b687c20

Browse files
committed
FIX: fine tune exit sequence to be nice with -v argument (early exit)
1 parent 7b39aa6 commit b687c20

File tree

2 files changed

+31
-25
lines changed

2 files changed

+31
-25
lines changed

src/core/b-init.c

+30-25
Original file line numberDiff line numberDiff line change
@@ -958,8 +958,8 @@ static void Set_Option_File(REBCNT field, REBYTE* src, REBOOL dir )
958958

959959
Init_Raw_Print(); // Low level output (Print)
960960

961-
Print_Banner(rargs);
962-
961+
Print_Banner(rargs); // Can cause early exit (-v)
962+
PG_Boot_Phase = BOOT_STARTED;
963963
DOUT("Level 1");
964964
Init_Char_Cases();
965965
Init_CRC(); // For word hashing
@@ -1040,32 +1040,37 @@ static void Set_Option_File(REBCNT field, REBYTE* src, REBOOL dir )
10401040
return; // can happen when close button, shutdown, etc.
10411041

10421042
Free_Series(Task_Series);
1043-
Free_Series(Bind_Table);
1044-
Free_Series(PG_Word_Table.hashes);
1045-
Free_Series(PG_Word_Table.series);
1046-
Free_Series(PG_Word_Names);
1043+
if (PG_Boot_Phase > BOOT_START) {
1044+
Free_Series(Bind_Table);
1045+
Free_Series(PG_Word_Table.hashes);
1046+
Free_Series(PG_Word_Table.series);
1047+
Free_Series(PG_Word_Names);
1048+
}
10471049
Free_Series(VAL_SERIES(ROOT_ROOT));
1048-
Free_Series(VAL_SERIES(ROOT_SYSTEM));
1049-
Free_Series(VAL_SERIES(ROOT_ERROBJ));
1050-
Free_Series(VAL_SERIES(ROOT_STRINGS));
1051-
Free_Series(VAL_SERIES(ROOT_TYPESETS));
1052-
Free_Series(VAL_SERIES(ROOT_BOOT));
1053-
Free_Series(VAL_SERIES(TASK_STACK));
1054-
Free_Series(VAL_SERIES(TASK_BUF_EMIT));
1055-
Free_Series(VAL_SERIES(TASK_BUF_WORDS));
1056-
Free_Series(VAL_SERIES(TASK_BUF_UTF8));
1057-
Free_Series(VAL_SERIES(TASK_BUF_PRINT));
1058-
Free_Series(VAL_SERIES(TASK_BUF_FORM));
1059-
Free_Series(VAL_SERIES(TASK_BUF_MOLD));
1060-
Free_Series(VAL_SERIES(TASK_MOLD_LOOP));
1061-
1050+
if (PG_Boot_Phase >= BOOT_MEZZ) {
1051+
Free_Series(VAL_SERIES(ROOT_SYSTEM));
1052+
Free_Series(VAL_SERIES(ROOT_ERROBJ));
1053+
Free_Series(VAL_SERIES(ROOT_STRINGS));
1054+
Free_Series(VAL_SERIES(ROOT_TYPESETS));
1055+
Free_Series(VAL_SERIES(ROOT_BOOT));
1056+
Free_Series(VAL_SERIES(TASK_STACK));
1057+
Free_Series(VAL_SERIES(TASK_BUF_EMIT));
1058+
Free_Series(VAL_SERIES(TASK_BUF_WORDS));
1059+
Free_Series(VAL_SERIES(TASK_BUF_UTF8));
1060+
Free_Series(VAL_SERIES(TASK_BUF_PRINT));
1061+
Free_Series(VAL_SERIES(TASK_BUF_FORM));
1062+
Free_Series(VAL_SERIES(TASK_BUF_MOLD));
1063+
Free_Series(VAL_SERIES(TASK_MOLD_LOOP));
1064+
}
10621065
Dispose_Memory();
1063-
Dispose_Char_Cases();
1064-
Dispose_Ports();
1065-
Dispose_Mold();
1066-
Dispose_CRC();
1066+
if (PG_Boot_Phase > BOOT_STARTED) {
1067+
Dispose_Char_Cases();
1068+
Dispose_Ports();
1069+
Dispose_Mold();
1070+
Dispose_CRC();
1071+
Free_Mem(PG_Boot_Strs, 0);
1072+
}
10671073
Dispose_StdIO();
10681074
Free_Mem(PG_Reb_Stats, 0);
1069-
Free_Mem(PG_Boot_Strs, 0);
10701075
Free_Mem(Reb_Opts, 0);
10711076
}

src/include/sys-core.h

+1
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ typedef struct rebol_mold {
130130

131131
enum Boot_Phases {
132132
BOOT_START = 0,
133+
BOOT_STARTED,
133134
BOOT_LOADED,
134135
BOOT_ERRORS,
135136
BOOT_MEZZ,

0 commit comments

Comments
 (0)