diff options
| author | William Lallemand <wlallemand@haproxy.org> | 2021-09-28 19:10:38 +0200 |
|---|---|---|
| committer | William Lallemand <wlallemand@haproxy.org> | 2021-09-28 19:12:36 +0200 |
| commit | f1de5e15f6124787b74dc88e79615c2722ddd768 (patch) | |
| tree | d1cc488ccf2f2d697c3339a1a06a180ffdaaee5e /src/hlua.c | |
| parent | 28a83b7a2ff0da99e80ef4e9c4954cb37b066d13 (diff) | |
| download | haproxy-httpclient-lua-2021-09-28.tar.gz | |
MINOR: httpclient/lua: implement garbage collectionhaproxy-httpclient-lua-2021-09-28
Implement the garbage collector of the lua httpclient.
This patch declares the __gc method of the httpclient object which only
does a httpclient_stop_and_destroy().
Diffstat (limited to 'src/hlua.c')
| -rw-r--r-- | src/hlua.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/hlua.c b/src/hlua.c index bfcbd4da4..148edf698 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -6895,6 +6895,25 @@ __LJMP static struct hlua_httpclient *hlua_checkhttpclient(lua_State *L, int ud) return MAY_LJMP(hlua_checkudata(L, ud, class_httpclient_ref)); } + +/* stops the httpclient and ask it to kill itself */ +__LJMP static int hlua_httpclient_gc(lua_State *L) +{ + struct hlua_httpclient *hlua_hc; + + MAY_LJMP(check_args(L, 1, "__gc")); + + hlua_hc = MAY_LJMP(hlua_checkhttpclient(L, 1)); + + httpclient_stop_and_destroy(hlua_hc->hc); + + hlua_hc->hc = NULL; + + + return 0; +} + + __LJMP static int hlua_httpclient_new(lua_State *L) { struct hlua_httpclient *hlua_hc; @@ -11747,6 +11766,11 @@ lua_State *hlua_init_state(int thread_num) lua_newtable(L); hlua_class_function(L, "get", hlua_httpclient_get); lua_settable(L, -3); /* Sets the __index entry. */ + /* Register the garbage collector entry. */ + lua_pushstring(L, "__gc"); + lua_pushcclosure(L, hlua_httpclient_gc, 0); + lua_settable(L, -3); /* Push the last 2 entries in the table at index -3 */ + class_httpclient_ref = hlua_register_metatable(L, CLASS_HTTPCLIENT); |
