From: cinap_lenrek Date: Sat, 25 Sep 2021 20:35:04 +0000 Subject: [PATCH] devtls: fix bwrite memory leak when channel stops being open tlsbwrite() would call checkstate() before calling tlsrecwrite() to make sure the channel is open. however, because checkstate() only raises the error, the Block* passed wont be freed and would result in a memory leak. move the checkstate() call inside tlsrecwrite() to reuse the error handling that frees the block on error. --- diff 235ef367d793db705b1b4ef20913c697eccd13a6 1cff923af4dbcaaab515cc04ea40c559eab7830f --- a/sys/src/9/port/devtls.c Sat Sep 25 12:57:58 2021 +++ b/sys/src/9/port/devtls.c Sat Sep 25 16:35:04 2021 @@ -1258,6 +1258,8 @@ if(tr->debug)pprint("send %zd\n", BLEN(b)); if(tr->debug)pdump(BLEN(b), b->rp, "sent:"); + if(type == RApplication) + checkstate(tr, 0, SOpen); ok = SHandshake|SOpen|SRClose; if(type == RAlert) @@ -1375,7 +1377,6 @@ tr->handout += n; break; case Qdata: - checkstate(tr, 0, SOpen); tlsrecwrite(tr, RApplication, b); tr->dataout += n; break;