]> rtime.felk.cvut.cz Git - frescor/forb.git/commitdiff
Fixed handling of addresses in HELLO packets
authorMichal Sojka <sojkam1@fel.cvut.cz>
Tue, 20 Jan 2009 13:12:12 +0000 (14:12 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Tue, 20 Jan 2009 13:12:12 +0000 (14:12 +0100)
src/iop.c
src/peer.c
src/proto.h
src/proto_inet.c

index d7d3a5326d35910b51cf59e42569e29074e9d769..b88fdd255cf0e7ee13f096d83c2d62322b30f564 100644 (file)
--- a/src/iop.c
+++ b/src/iop.c
@@ -394,6 +394,8 @@ process_hello(forb_port_t *port, FORB_CDR_Codec *codec)
                peer = forb_peer_find(forb, &server_id);
                if (peer && peer->state == FORB_PEER_DISCOVERED) {
                        /* TODO: Update last hello receive time */
+                       if (addr)
+                               forb_free(addr);
                        forb_peer_put(peer);
                } else {
                        /* New peer discovered */
index 17fcb37c71fce228a4f426b7739a371c20a68ad2..63c97f7c7319c69ed9e688ab1494017f3785f7e3 100644 (file)
@@ -91,6 +91,9 @@ forb_peer_release(forb_ref_t *ref)
            peer->port->desc.proto->peer_destroy) {
                peer->port->desc.proto->peer_destroy(peer);
        }
+       if (peer->addr)
+               forb_free(peer->addr);
+       
        forb_free(peer);
 }
 
index f26ec4a59039ac556d9abbc3099a51cae87353e7..58426b7ed0e8fbdcf2f3e447c1b93be82b3e631f 100644 (file)
@@ -103,6 +103,9 @@ struct forb_proto {
         * peer.
         * 
         * @param peer Peer to destroy
+        * 
+        * @note The memory allocated by @a deserialize_addr (if any)
+        * is deallocated by FORB and should not be deallocated here.
         */
        void (*peer_destroy)(forb_peer_t *peer);
        /** 
@@ -136,7 +139,8 @@ struct forb_proto {
        /** Serializes the protocol specific address */
        CORBA_boolean (*serialize_addr)(FORB_CDR_Codec *codec, const void *addr);
 
-       /** Deserializes the protocol specific address */
+       /** Deserializes the protocol specific address. The memory for
+        * storing the address should be allocated by forb_malloc(). */
        CORBA_boolean (*deserialize_addr)(FORB_CDR_Codec *codec, void **addr);
 };
 
index fae7ec2f5c1f628ea28b17dc0261676cb4749c0b..362e7d25a4a2bd69496ee70aa98032d094810964 100644 (file)
@@ -109,12 +109,16 @@ inet_serialize_addr(FORB_CDR_Codec *codec, const void *addr)
 static CORBA_boolean
 inet_deserialize_addr(FORB_CDR_Codec *codec, void **addr)
 {
-       struct inet_addr *a = *addr;
+       struct inet_addr *a;
        CORBA_long s_addr;
        CORBA_boolean ret;
 
+       a = forb_malloc(sizeof(*a));
+       if (!a)
+               return CORBA_FALSE;
        ret = CORBA_long_deserialize(codec, &s_addr);
        a->addr.s_addr = s_addr;
+       *addr = a;
        return ret;
 }
 
@@ -125,7 +129,9 @@ inet_connect(forb_peer_t *peer)
        struct sockaddr_in sa;
        struct inet_addr *addr = peer->addr;
        int ret;
-       
+
+       if (!addr)
+               return NULL;
        ipeer = forb_malloc(sizeof(*ipeer));
        if (!ipeer)
                goto err;