[NET]: Introduce protocol-specific destructor for time-wait sockets.
authorYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Wed, 11 Oct 2006 02:42:09 +0000 (19:42 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Thu, 12 Oct 2006 07:00:00 +0000 (00:00 -0700)
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/inet_timewait_sock.h
include/net/timewait_sock.h

index 6d14c22..5f48748 100644 (file)
@@ -196,6 +196,7 @@ static inline void inet_twsk_put(struct inet_timewait_sock *tw)
 {
        if (atomic_dec_and_test(&tw->tw_refcnt)) {
                struct module *owner = tw->tw_prot->owner;
+               twsk_destructor((struct sock *)tw);
 #ifdef SOCK_REFCNT_DEBUG
                printk(KERN_DEBUG "%s timewait_sock %p released\n",
                       tw->tw_prot->name, tw);
index 2544281..be293d7 100644 (file)
@@ -19,6 +19,7 @@ struct timewait_sock_ops {
        unsigned int    twsk_obj_size;
        int             (*twsk_unique)(struct sock *sk,
                                       struct sock *sktw, void *twp);
+       void            (*twsk_destructor)(struct sock *sk);
 };
 
 static inline int twsk_unique(struct sock *sk, struct sock *sktw, void *twp)
@@ -28,4 +29,10 @@ static inline int twsk_unique(struct sock *sk, struct sock *sktw, void *twp)
        return 0;
 }
 
+static inline void twsk_destructor(struct sock *sk)
+{
+       if (sk->sk_prot->twsk_prot->twsk_destructor != NULL)
+               sk->sk_prot->twsk_prot->twsk_destructor(sk);
+}
+
 #endif /* _TIMEWAIT_SOCK_H */