summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2013-03-03 21:18:22 +0100
committerMike Pall <mike>2013-03-03 21:18:22 +0100
commitdac2825e9d626d910fc2657d1d9b68d225f18b57 (patch)
tree3b4ea78d5a8b887dd910eafc93fba3810ad00430 /src
parent78c97bc5a1529b0e21d417011ddb956c08a4643e (diff)
downloadluajit-dac2825e9d626d910fc2657d1d9b68d225f18b57.tar.gz
luajit-dac2825e9d626d910fc2657d1d9b68d225f18b57.tar.bz2
luajit-dac2825e9d626d910fc2657d1d9b68d225f18b57.zip
Add missing GC steps for io.* functions.
Diffstat (limited to 'src')
-rw-r--r--src/lib_io.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/lib_io.c b/src/lib_io.c
index 8858683f..e0c6908f 100644
--- a/src/lib_io.c
+++ b/src/lib_io.c
@@ -17,6 +17,7 @@
17#include "lualib.h" 17#include "lualib.h"
18 18
19#include "lj_obj.h" 19#include "lj_obj.h"
20#include "lj_gc.h"
20#include "lj_err.h" 21#include "lj_err.h"
21#include "lj_str.h" 22#include "lj_str.h"
22#include "lj_state.h" 23#include "lj_state.h"
@@ -152,6 +153,7 @@ static int io_file_readline(lua_State *L, FILE *fp, MSize chop)
152 if (n >= m - 64) m += m; 153 if (n >= m - 64) m += m;
153 } 154 }
154 setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); 155 setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n));
156 lj_gc_check(L);
155 return (int)ok; 157 return (int)ok;
156} 158}
157 159
@@ -163,6 +165,7 @@ static void io_file_readall(lua_State *L, FILE *fp)
163 n += (MSize)fread(buf+n, 1, m-n, fp); 165 n += (MSize)fread(buf+n, 1, m-n, fp);
164 if (n != m) { 166 if (n != m) {
165 setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); 167 setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n));
168 lj_gc_check(L);
166 return; 169 return;
167 } 170 }
168 } 171 }
@@ -174,6 +177,7 @@ static int io_file_readlen(lua_State *L, FILE *fp, MSize m)
174 char *buf = lj_str_needbuf(L, &G(L)->tmpbuf, m); 177 char *buf = lj_str_needbuf(L, &G(L)->tmpbuf, m);
175 MSize n = (MSize)fread(buf, 1, m, fp); 178 MSize n = (MSize)fread(buf, 1, m, fp);
176 setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); 179 setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n));
180 lj_gc_check(L);
177 return (n > 0 || m == 0); 181 return (n > 0 || m == 0);
178 } else { 182 } else {
179 int c = getc(fp); 183 int c = getc(fp);