diff options
| -rw-r--r-- | ecp/server/dir.c | 6 | ||||
| -rw-r--r-- | ecp/server/vlink.c | 5 | ||||
| -rw-r--r-- | ecp/server/vlink.h | 1 | 
3 files changed, 10 insertions, 2 deletions
diff --git a/ecp/server/dir.c b/ecp/server/dir.c index c045599..b941050 100644 --- a/ecp/server/dir.c +++ b/ecp/server/dir.c @@ -497,7 +497,10 @@ int dir_open_conn(DIRNode *node, ECPSocket *sock) {      ecp_conn_set_flags(node->conn, ECP_CONN_FLAG_VBOX);      rv = ecp_conn_open(node->conn, &node->dir_item.node); -    if (rv) node->conn = NULL; +    if (rv) { +        free(node->conn); +        node->conn = NULL; +    }      return rv;  } @@ -932,6 +935,7 @@ int dir_init_ann(ECPSocket *sock, ECPNode *node) {      ecp_conn_set_flags(conn, ECP_CONN_FLAG_VBOX);      rv = ecp_conn_open(conn, node);      if (rv) { +        free(conn);          LOG(LOG_ERR, "dir_init_ann: conn open err:%d\n", rv);          return rv;      } diff --git a/ecp/server/vlink.c b/ecp/server/vlink.c index fcb9a5c..445734c 100644 --- a/ecp/server/vlink.c +++ b/ecp/server/vlink.c @@ -33,7 +33,10 @@ int vlink_open_conn(ECPSocket *sock, ECPNode *node, ECPConnection **_conn) {      ecp_vlink_init(conn, sock);      rv = ecp_conn_open(conn, node); -    if (rv) return rv; +    if (rv) { +        free(conn); +        return rv; +    }      *_conn = conn;      return ECP_OK; diff --git a/ecp/server/vlink.h b/ecp/server/vlink.h index 3e8022f..b591d11 100644 --- a/ecp/server/vlink.h +++ b/ecp/server/vlink.h @@ -1,6 +1,7 @@  #define MAX_KEYX_CNT            100  #define KEYX_PERIOD             600     /* key exchange priod (s); can't exceed 1h */ +  #define VLINK_UFLAG_DISCONNECT  0x80  int vlink_open_conn(ECPSocket *sock, ECPNode *node, ECPConnection **_conn);  | 
