Navigation


Changeset 637:22e8fac3b2d6 in freeDiameter for libfreeDiameter/messages.c


Ignore:
Timestamp:
Dec 16, 2010, 6:56:41 PM (13 years ago)
Author:
Sebastien Decugis <sdecugis@nict.go.jp>
Branch:
default
Phase:
public
Message:

Split interface file in modules

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libfreeDiameter/messages.c

    r400 r637  
    118118        int                      msg_routable;          /* Is this a routable message? (0: undef, 1: routable, 2: non routable) */
    119119        struct msg              *msg_query;             /* the associated query if the message is a received answer */
     120        int                      msg_associated;        /* and the counter part information in the query, to avoid double free */
    120121        struct rt_data          *msg_rtdata;            /* Routing list for the query */
    121122        struct session          *msg_sess;              /* Cached message session if any */
     
    342343        /* associate with query */
    343344        ans->msg_query = qry;
     345        qry->msg_associated = 1;
    344346       
    345347        /* Done */
     
    629631        if (CHECK_MSG(object)) {
    630632                if (_M(object)->msg_query) {
     633                        _M(_M(object)->msg_query)->msg_associated = 0;
    631634                        CHECK_FCT(  fd_msg_free( _M(object)->msg_query )  );
    632635                        _M(object)->msg_query = NULL;
     636                } else {
     637                        if (_M(object)->msg_associated) {
     638                                TRACE_DEBUG(INFO, "Not freeing query %p referenced in an answer (will be freed along the answer).", object);
     639                                return 0;
     640                        }
    633641                }
    634642        }
     
    689697                msg->msg_public.msg_eteid
    690698                );
    691         fd_log_debug(INOBJHDR "intern: rwb:%p rt:%d cb:%p(%p) qry:%p sess:%p src:%s\n",
    692                         INOBJHDRVAL, msg->msg_rawbuffer, msg->msg_routable, msg->msg_cb.fct, msg->msg_cb.data, msg->msg_query, msg->msg_sess, msg->msg_src_id?:"(nil)");
     699        fd_log_debug(INOBJHDR "intern: rwb:%p rt:%d cb:%p(%p) qry:%p asso:%d sess:%p src:%s\n",
     700                        INOBJHDRVAL, msg->msg_rawbuffer, msg->msg_routable, msg->msg_cb.fct, msg->msg_cb.data, msg->msg_query, msg->msg_associated, msg->msg_sess, msg->msg_src_id?:"(nil)");
    693701}
    694702
     
    862870       
    863871        answer->msg_query = query;
     872        query->msg_associated = 1;
    864873       
    865874        return 0;
     
    883892        CHECK_PARAMS(  CHECK_MSG(answer) );
    884893       
     894        answer->msg_query->msg_associated = 0;
    885895        answer->msg_query = NULL;
    886896       
Note: See TracChangeset for help on using the changeset viewer.