diff options
Diffstat (limited to 'net/dccp/proto.c')
-rw-r--r-- | net/dccp/proto.c | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/net/dccp/proto.c b/net/dccp/proto.c index 6f14bb5a28d4..962df0ea31aa 100644 --- a/net/dccp/proto.c +++ b/net/dccp/proto.c | |||
@@ -662,17 +662,8 @@ int dccp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, | |||
662 | if (rc != 0) | 662 | if (rc != 0) |
663 | goto out_discard; | 663 | goto out_discard; |
664 | 664 | ||
665 | rc = dccp_write_xmit(sk, skb, &timeo); | 665 | skb_queue_tail(&sk->sk_write_queue, skb); |
666 | /* | 666 | dccp_write_xmit(sk,0); |
667 | * XXX we don't use sk_write_queue, so just discard the packet. | ||
668 | * Current plan however is to _use_ sk_write_queue with | ||
669 | * an algorith similar to tcp_sendmsg, where the main difference | ||
670 | * is that in DCCP we have to respect packet boundaries, so | ||
671 | * no coalescing of skbs. | ||
672 | * | ||
673 | * This bug was _quickly_ found & fixed by just looking at an OSTRA | ||
674 | * generated callgraph 8) -acme | ||
675 | */ | ||
676 | out_release: | 667 | out_release: |
677 | release_sock(sk); | 668 | release_sock(sk); |
678 | return rc ? : len; | 669 | return rc ? : len; |
@@ -846,6 +837,7 @@ static int dccp_close_state(struct sock *sk) | |||
846 | 837 | ||
847 | void dccp_close(struct sock *sk, long timeout) | 838 | void dccp_close(struct sock *sk, long timeout) |
848 | { | 839 | { |
840 | struct dccp_sock *dp = dccp_sk(sk); | ||
849 | struct sk_buff *skb; | 841 | struct sk_buff *skb; |
850 | int state; | 842 | int state; |
851 | 843 | ||
@@ -862,6 +854,8 @@ void dccp_close(struct sock *sk, long timeout) | |||
862 | goto adjudge_to_death; | 854 | goto adjudge_to_death; |
863 | } | 855 | } |
864 | 856 | ||
857 | sk_stop_timer(sk, &dp->dccps_xmit_timer); | ||
858 | |||
865 | /* | 859 | /* |
866 | * We need to flush the recv. buffs. We do this only on the | 860 | * We need to flush the recv. buffs. We do this only on the |
867 | * descriptor close, not protocol-sourced closes, because the | 861 | * descriptor close, not protocol-sourced closes, because the |