Changeset 76eeca0


Ignore:
Timestamp:
10/25/06 17:41:41 (14 years ago)
Author:
Perry Lorier <perry@…>
Branches:
4.0.1-hotfixes, cachetimestamps, develop, dpdk-ndag, etsilive, getfragoff, help, libtrace4, master, ndag_format, pfring, rc-4.0.1, rc-4.0.2, rc-4.0.3, rc-4.0.4, ringdecrementfix, ringperformance, ringtimestampfixes
Children:
ccf95ca
Parents:
10a46bd
Message:

Free duplicated packet

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/trace.c

    r1352066 r76eeca0  
    994994        void *linkptr = 0;
    995995        int clen = 0;
     996        bool free_packet_needed = false;
     997        int ret;
    996998        assert(filter);
    997999        assert(packet);
    998         linkptr = trace_get_link(packet);
    999         if (!linkptr) {
    1000                 return 0;
    1001         }
    1002 
    1003         /* We need to compile it now, because before we didn't know what the
    1004          * link type was
    1005          */
    1006         if (trace_bpf_compile(filter,packet)==-1)
    1007                 return -1;
    10081000
    10091001        if (libtrace_to_pcap_dlt(trace_get_link_type(packet))==~0) {
     
    10121004                 */
    10131005                packet=trace_copy_packet(packet);
     1006                free_packet_needed=true;
    10141007                while (libtrace_to_pcap_dlt(trace_get_link_type(packet))==~0) {
    10151008                        if (!demote_packet(packet)) {
     
    10171010                                                TRACE_ERR_NO_CONVERSION,
    10181011                                                "pcap does not support this format");
     1012                                if (free_packet_needed) {
     1013                                        trace_destroy_packet(packet);
     1014                                }
    10191015                                return -1;
    10201016                        }
     
    10221018        }
    10231019       
     1020        linkptr = trace_get_link(packet);
     1021        if (!linkptr) {
     1022                if (free_packet_needed) {
     1023                        trace_destroy_packet(packet);
     1024                }
     1025                return 0;
     1026        }
     1027
     1028        /* We need to compile it now, because before we didn't know what the
     1029         * link type was
     1030         */
     1031        if (trace_bpf_compile(filter,packet)==-1) {
     1032                if (free_packet_needed) {
     1033                        trace_destroy_packet(packet);
     1034                }
     1035                return -1;
     1036        }
     1037
    10241038        clen = trace_get_capture_length(packet);
    10251039
    10261040        assert(filter->flag);
    1027         return bpf_filter(filter->filter.bf_insns,(u_char*)linkptr,clen,clen);
     1041        ret=bpf_filter(filter->filter.bf_insns,(u_char*)linkptr,clen,clen);
     1042        if (free_packet_needed) {
     1043                trace_destroy_packet(packet);
     1044        }
     1045        return ret;
    10281046#else
    10291047        fprintf(stderr,"This version of libtrace does not have bpf filter support\n");
Note: See TracChangeset for help on using the changeset viewer.