CVSROOT:        /cvs/cluster
Module name:    cluster
Branch:         RHEL4
Changes by:     [EMAIL PROTECTED]       2007-08-06 14:40:50

Modified files:
        dlm-kernel/src : lowcomms.c 

Log message:
        Clean out 'othercon' structures when the connection is closed.
        bz#245828 comments 15->19 &
        bz#248957 comment 3

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm-kernel/src/lowcomms.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.22.2.15&r2=1.22.2.16

--- cluster/dlm-kernel/src/Attic/lowcomms.c     2007/07/16 09:26:05     
1.22.2.15
+++ cluster/dlm-kernel/src/Attic/lowcomms.c     2007/08/06 14:40:50     
1.22.2.16
@@ -315,15 +315,23 @@
                   will only re-enter once.
                */
                close_connection(con->othercon, FALSE);
-               kmem_cache_free(con_cache, con->othercon);
-               con->othercon = NULL;
        }
        if (con->rx_page) {
                __free_page(con->rx_page);
                con->rx_page = NULL;
        }
-       con->retries = 0;
-       up_write(&con->sock_sem);
+       /* If we are an 'othercon' then NULL the pointer to us
+          from the parent and tidy ourself up */
+       if (test_bit(CF_IS_OTHERCON, &con->flags)) {
+               struct connection *parent = connections[con->nodeid];
+               parent->othercon = NULL;
+               kmem_cache_free(con_cache, con);
+       }
+       else {
+               /* Parent connections get reused */
+               con->retries = 0;
+               up_write(&con->sock_sem);
+       }
 }
 
 /* Data received from remote end */
@@ -426,7 +434,7 @@
 
       out_close:
        up_read(&con->sock_sem);
-       if (ret != -EAGAIN && !test_bit(CF_IS_OTHERCON, &con->flags)) {
+       if (ret != -EAGAIN) {
                close_connection(con, FALSE);
                /* Reconnect when there is something to send */
        }
@@ -1206,8 +1214,6 @@
        for (i = 0; i < conn_array_size; i++) {
                if (connections[i]) {
                        close_connection(connections[i], TRUE);
-                       if (connections[i]->othercon)
-                               kmem_cache_free(con_cache, 
connections[i]->othercon);
                        kmem_cache_free(con_cache, connections[i]);
                }
        }

Reply via email to