khan: special case removing chan at list head

This commit is contained in:
Jōshin 2021-10-22 21:45:11 +00:00
parent ed7c33e070
commit 2e12d3792e
No known key found for this signature in database
GPG Key ID: A8BE5A9A521639D0

View File

@ -64,19 +64,23 @@ _khan_moor_bail(void* ptr_v, ssize_t err_i, const c3_c* err_c)
{ {
u3_chan* can_u = (u3_chan*)ptr_v; u3_chan* can_u = (u3_chan*)ptr_v;
u3_shan* san_u = can_u->san_u; u3_shan* san_u = can_u->san_u;
u3_khan* kan_u = san_u->kan_u;
u3_chan* inn_u; u3_chan* inn_u;
if ( err_i == UV_EOF ) { if ( err_i == UV_EOF ) {
// close socket and remove reference. // close socket and remove reference.
for ( inn_u = san_u->can_u; inn_u; inn_u = (u3_chan*)inn_u->mor_u.nex_u ) { if ( san_u->can_u == can_u ) {
if ( (u3_chan*)inn_u->mor_u.nex_u == can_u ) { san_u->can_u = (u3_chan*)can_u->mor_u.nex_u;
inn_u->mor_u.nex_u = can_u->mor_u.nex_u; }
can_u->mor_u.nex_u = NULL; else {
u3_newt_moat_stop((u3_moat*)&can_u->mor_u, _khan_moat_free); for ( inn_u = san_u->can_u; inn_u; inn_u = (u3_chan*)inn_u->mor_u.nex_u ) {
break; if ( (u3_chan*)inn_u->mor_u.nex_u == can_u ) {
inn_u->mor_u.nex_u = can_u->mor_u.nex_u;
break;
}
} }
} }
can_u->mor_u.nex_u = NULL;
u3_newt_moat_stop((u3_moat*)&can_u->mor_u, _khan_moat_free);
} }
else { else {
// TODO retry up to N // TODO retry up to N