X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Ffnet-dc.c;h=a79a68189e062902df49e860b1c977120ef53b7b;hb=7665d29ddb2ab55ab455a4cfcd840ea38af06c04;hp=afd13b3121dd6de85b2909d7693f32ffc04d4d3f;hpb=c3d01fa95daeee35607cdf7ddc8e688c4a49ea50;p=doldaconnect.git diff --git a/daemon/fnet-dc.c b/daemon/fnet-dc.c index afd13b3..a79a681 100644 --- a/daemon/fnet-dc.c +++ b/daemon/fnet-dc.c @@ -2762,6 +2762,7 @@ static void peerdetach(struct dcpeer *peer) { CBUNREG(peer->transfer, trans_filterout, peer); CBUNREG(peer->transfer, trans_destroy, peer); + peer->trpipe->pnext = NULL; closesock(peer->trpipe); quitsock(peer->trpipe); peer->trpipe = NULL; @@ -2828,6 +2829,7 @@ static void transwrite(struct socket *sk, struct dcpeer *peer) return; } dctransgotdata(peer->transfer, peer); + sockread(peer->trpipe); } static void trpiperead(struct socket *sk, struct dcpeer *peer) @@ -2854,6 +2856,7 @@ static struct socket *mktrpipe(struct dcpeer *peer) struct socket *sk; sk = netsockpipe(); + sk->pnext = peer->sk; sk->data = peer; sk->readcb = (void (*)(struct socket *, void *))trpiperead; sk->writecb = (void (*)(struct socket *, void *))trpipewrite; @@ -3215,7 +3218,7 @@ static void hubdestroy(struct fnetnode *fn) struct qcommand *qcmd; hub = (struct dchub *)fn->data; - putsock(hub->sk); + quitsock(hub->sk); while((qcmd = ulqcmd(&hub->queue)) != NULL) freeqcmd(qcmd); if(hub->supports != NULL)