summaryrefslogtreecommitdiff
path: root/lib/utils
diff options
context:
space:
mode:
authorScott Shawcroft <scott@tannewt.org>2018-06-28 10:38:57 -0700
committerScott Shawcroft <scott@tannewt.org>2018-07-03 05:45:50 -0700
commit519287550c184db3c3843f10e27111a006fec4b1 (patch)
treef457a60bad74b0aa5c31decfe77f1b7b7ad89a73 /lib/utils
parentec78d3cefdd98b317a01840e172e7453013ada0c (diff)
Long-live code.py itself.
Diffstat (limited to 'lib/utils')
-rwxr-xr-x[-rw-r--r--]lib/utils/pyexec.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/utils/pyexec.c b/lib/utils/pyexec.c
index 718c6828c..929ee5224 100644..100755
--- a/lib/utils/pyexec.c
+++ b/lib/utils/pyexec.c
@@ -33,6 +33,7 @@
#include "py/runtime.h"
#include "py/repl.h"
#include "py/gc.h"
+#include "py/gc_long_lived.h"
#include "py/frozenmod.h"
#include "py/mphal.h"
#if defined(USE_DEVICE_MODE)
@@ -97,6 +98,13 @@ STATIC int parse_compile_execute(const void *source, mp_parse_input_kind_t input
#endif
}
+ // If the code was loaded from a file its likely to be running for a while so we'll long
+ // live it and collect any garbage before running.
+ if (input_kind == MP_PARSE_FILE_INPUT) {
+ module_fun = make_obj_long_lived(module_fun, 6);
+ gc_collect();
+ }
+
// execute code
mp_hal_set_interrupt_char(CHAR_CTRL_C); // allow ctrl-C to interrupt us
start = mp_hal_ticks_ms();