@@ -176,6 +176,22 @@ bool maybe_run_list(const char ** filenames, pyexec_result_t* exec_result) {
176
176
return true;
177
177
}
178
178
179
+ void cleanup_after_vm (supervisor_allocation * heap ) {
180
+ // Turn off the display and flush the fileystem before the heap disappears.
181
+ #if CIRCUITPY_DISPLAYIO
182
+ reset_displays ();
183
+ #endif
184
+ filesystem_flush ();
185
+ stop_mp ();
186
+ free_memory (heap );
187
+ supervisor_move_memory ();
188
+
189
+ reset_port ();
190
+ reset_board_busses ();
191
+ reset_board ();
192
+ reset_status_led ();
193
+ }
194
+
179
195
bool run_code_py (safe_mode_t safe_mode ) {
180
196
bool serial_connected_at_start = serial_connected ();
181
197
#ifdef CIRCUITPY_AUTORELOAD_DELAY_MS
@@ -219,19 +235,7 @@ bool run_code_py(safe_mode_t safe_mode) {
219
235
serial_write_compressed (translate ("WARNING: Your code filename has two extensions\n" ));
220
236
}
221
237
}
222
- // Turn off the display and flush the fileystem before the heap disappears.
223
- #if CIRCUITPY_DISPLAYIO
224
- reset_displays ();
225
- #endif
226
- filesystem_flush ();
227
- stop_mp ();
228
- free_memory (heap );
229
- supervisor_move_memory ();
230
-
231
- reset_port ();
232
- reset_board_busses ();
233
- reset_board ();
234
- reset_status_led ();
238
+ cleanup_after_vm (heap );
235
239
236
240
if (result .return_code & PYEXEC_FORCED_EXIT ) {
237
241
return reload_requested ;
@@ -359,13 +363,7 @@ void __attribute__ ((noinline)) run_boot_py(safe_mode_t safe_mode) {
359
363
boot_output_file = NULL ;
360
364
#endif
361
365
362
- // Reset to remove any state that boot.py setup. It should only be used to
363
- // change internal state that's not in the heap.
364
- reset_port ();
365
- reset_board ();
366
- stop_mp ();
367
- free_memory (heap );
368
- supervisor_move_memory ();
366
+ cleanup_after_vm (heap );
369
367
}
370
368
}
371
369
@@ -382,12 +380,7 @@ int run_repl(void) {
382
380
} else {
383
381
exit_code = pyexec_friendly_repl ();
384
382
}
385
- filesystem_flush ();
386
- reset_port ();
387
- reset_board ();
388
- stop_mp ();
389
- free_memory (heap );
390
- supervisor_move_memory ();
383
+ cleanup_after_vm (heap );
391
384
autoreload_resume ();
392
385
return exit_code ;
393
386
}
0 commit comments