diff options
Diffstat (limited to 'lgc.c')
-rw-r--r-- | lgc.c | 12 |
1 files changed, 5 insertions, 7 deletions
@@ -1037,7 +1037,7 @@ void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt) { | |||
1037 | */ | 1037 | */ |
1038 | static void setpause (global_State *g) { | 1038 | static void setpause (global_State *g) { |
1039 | unsigned int pause = getgcparam(g->gcpause); | 1039 | unsigned int pause = getgcparam(g->gcpause); |
1040 | lu_mem threshold = g->marked / 8 * pause / 12; | 1040 | l_obj threshold = g->marked / 8 * pause / 12; |
1041 | l_obj debt = gettotalobjs(g) - threshold; | 1041 | l_obj debt = gettotalobjs(g) - threshold; |
1042 | if (debt > 0) debt = 0; | 1042 | if (debt > 0) debt = 0; |
1043 | luaE_setdebt(g, debt); | 1043 | luaE_setdebt(g, debt); |
@@ -1600,18 +1600,16 @@ void luaC_runtilstate (lua_State *L, int statesmask) { | |||
1600 | ** controls when next step will be performed. | 1600 | ** controls when next step will be performed. |
1601 | */ | 1601 | */ |
1602 | static void incstep (lua_State *L, global_State *g) { | 1602 | static void incstep (lua_State *L, global_State *g) { |
1603 | int stepmul = (getgcparam(g->gcstepmul) | 1); /* avoid division by 0 */ | ||
1604 | l_obj debt = (g->GCdebt / 100) * stepmul; | ||
1605 | l_obj stepsize = cast(l_obj, 1) << g->gcstepsize; | 1603 | l_obj stepsize = cast(l_obj, 1) << g->gcstepsize; |
1604 | l_obj work2do = stepsize * getgcparam(g->gcstepmul) / 100; | ||
1606 | do { /* repeat until pause or enough "credit" (negative debt) */ | 1605 | do { /* repeat until pause or enough "credit" (negative debt) */ |
1607 | l_obj work = singlestep(L); /* perform one single step */ | 1606 | l_obj work = singlestep(L); /* perform one single step */ |
1608 | debt -= work; | 1607 | work2do -= work; |
1609 | } while (debt > -stepsize && g->gcstate != GCSpause); | 1608 | } while (work2do > 0 && g->gcstate != GCSpause); |
1610 | if (g->gcstate == GCSpause) | 1609 | if (g->gcstate == GCSpause) |
1611 | setpause(g); /* pause until next cycle */ | 1610 | setpause(g); /* pause until next cycle */ |
1612 | else { | 1611 | else { |
1613 | debt = (debt / stepmul) * 100; /* apply step multiplier */ | 1612 | luaE_setdebt(g, -stepsize); |
1614 | luaE_setdebt(g, debt); | ||
1615 | } | 1613 | } |
1616 | } | 1614 | } |
1617 | 1615 | ||