Lines Matching refs:lim
23 struct mcp_ratelim_global_tbf *lim = luaL_checkudata(L, 1, "mcp.ratelim_global_tbf"); in mcplib_ratelim_global_tbf_gc() local
24 assert(lim->g.refcount == 0); in mcplib_ratelim_global_tbf_gc()
25 mcp_gobj_finalize(&lim->g); in mcplib_ratelim_global_tbf_gc()
34 struct mcp_ratelim_global_tbf *lim = *lim_p; in mcplib_ratelim_proxy_tbf_gc() local
36 mcp_gobj_unref(ctx, &lim->g); in mcplib_ratelim_proxy_tbf_gc()
43 struct mcp_ratelim_global_tbf *lim = luaL_checkudata(from, -3, "mcp.ratelim_global_tbf"); in mcp_ratelim_proxy_tbf() local
47 *lim_p = lim; in mcp_ratelim_proxy_tbf()
49 mcp_gobj_ref(from, &lim->g); // pops obj copy in mcp_ratelim_proxy_tbf()
66 static void _setup_tbf(lua_State *L, struct mcp_ratelim_tbf *lim) { in _setup_tbf() argument
69 lim->limit = _tbf_check(L, "limit"); in _setup_tbf()
70 lim->fill_rate = _tbf_check(L, "fillrate"); in _setup_tbf()
71 lim->tick_rate = _tbf_check(L, "tickrate"); in _setup_tbf()
74 lim->bucket = lim->limit; in _setup_tbf()
76 lim->last_update = TIMEVAL_TO_MILLIS(now); in _setup_tbf()
80 struct mcp_ratelim_tbf *lim = lua_newuserdatauv(L, sizeof(*lim), 0); in mcplib_ratelim_tbf() local
81 memset(lim, 0, sizeof(*lim)); in mcplib_ratelim_tbf()
84 _setup_tbf(L, lim); in mcplib_ratelim_tbf()
89 struct mcp_ratelim_global_tbf *lim = lua_newuserdatauv(L, sizeof(*lim), 0); in mcplib_ratelim_global_tbf() local
90 memset(lim, 0, sizeof(*lim)); in mcplib_ratelim_global_tbf()
93 pthread_mutex_init(&lim->g.lock, NULL); in mcplib_ratelim_global_tbf()
96 _setup_tbf(L, &lim->tbf); in mcplib_ratelim_global_tbf()
100 static int _update_tbf(struct mcp_ratelim_tbf *lim, int take, uint64_t now) { in _update_tbf() argument
102 delta = now - lim->last_update; in _update_tbf()
104 if (delta > lim->tick_rate) { in _update_tbf()
106 uint32_t toadd = delta / lim->tick_rate; in _update_tbf()
108 lim->last_update += toadd * lim->tick_rate; in _update_tbf()
110 lim->bucket += toadd * lim->fill_rate; in _update_tbf()
111 if (lim->bucket > lim->limit) { in _update_tbf()
112 lim->bucket = lim->limit; in _update_tbf()
116 if (lim->bucket > take) { in _update_tbf()
117 lim->bucket -= take; in _update_tbf()
125 struct mcp_ratelim_tbf *lim = luaL_checkudata(L, 1, "mcp.ratelim_tbf"); in mcplib_ratelim_tbf_call() local
133 lua_pushboolean(L, _update_tbf(lim, take, now_millis)); in mcplib_ratelim_tbf_call()
151 struct mcp_ratelim_global_tbf *lim = *lim_p; in mcplib_ratelim_proxy_tbf_call() local
159 pthread_mutex_lock(&lim->g.lock); in mcplib_ratelim_proxy_tbf_call()
160 int res = _update_tbf(&lim->tbf, take, now_millis); in mcplib_ratelim_proxy_tbf_call()
161 pthread_mutex_unlock(&lim->g.lock); in mcplib_ratelim_proxy_tbf_call()