summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--proto_proxy.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/proto_proxy.c b/proto_proxy.c
index 95c9de1..5a40c7d 100644
--- a/proto_proxy.c
+++ b/proto_proxy.c
@@ -419,8 +419,9 @@ void complete_nread_proxy(conn *c) {
conn_set_state(c, conn_new_cmd);
// Grab our coroutine.
+ // Leave the reference alone in case we error out, so the conn cleanup
+ // routine can handle it properly.
lua_rawgeti(L, LUA_REGISTRYINDEX, c->proxy_coro_ref);
- luaL_unref(L, LUA_REGISTRYINDEX, c->proxy_coro_ref);
lua_State *Lc = lua_tothread(L, -1);
mcp_request_t *rq = luaL_checkudata(Lc, -1, "mcp.request");
@@ -439,6 +440,7 @@ void complete_nread_proxy(conn *c) {
rq->pr.vbuf = c->item;
c->item = NULL;
c->item_malloced = false;
+ luaL_unref(L, LUA_REGISTRYINDEX, c->proxy_coro_ref);
c->proxy_coro_ref = 0;
proxy_run_coroutine(Lc, c->resp, NULL, c);