Modified extarct from Didier Gautheron:
authoretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>
Sun, 13 Sep 2009 13:39:09 +0000 (13:39 +0000)
committeretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>
Sun, 13 Sep 2009 13:39:09 +0000 (13:39 +0000)
optimizations patch http://wiki.wireshark.org/Development/Optimization
'patch.29854.diff.gz"

- ei->protocol is a constant.
- Don't setup expert tap data if there's no tap.

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@29873 f5534014-38df-0310-8fa8-9805f1628bb7

epan/expert.c
epan/expert.h

index 0b25440f16d59c91242f7676334cc00995fa86fc..b8cf94fe1559969a9f2ed78b77c5aba59f08e83f 100644 (file)
@@ -150,9 +150,10 @@ expert_set_info_vformat(
 packet_info *pinfo, proto_item *pi, int group, int severity, const char *format, va_list ap)
 {
        char                    formatted[300];
+       int                             tap;
        expert_info_t   *ei;
-       proto_tree      *tree;
-       proto_item      *ti;
+       proto_tree              *tree;
+       proto_item              *ti;
 
 
        /* if this packet isn't loaded because of a read filter, don't output anything */
@@ -160,21 +161,22 @@ packet_info *pinfo, proto_item *pi, int group, int severity, const char *format,
                return;
        }
 
-        if(severity > highest_severity) {
-            highest_severity = severity;
-        }
+    if(severity > highest_severity) {
+        highest_severity = severity;
+    }
+
+       if(pi != NULL && pi->finfo != NULL) {   
+               expert_set_item_flags(pi, group, severity);
+       }
+
+       if (check_col(pinfo->cinfo, COL_EXPERT))
+               col_add_str(pinfo->cinfo, COL_EXPERT, val_to_str(severity, expert_severity_vals, "?%u?"));
+
+       tap = have_tap_listener(expert_tap);
 
        /* XXX - use currently nonexistant se_vsnprintf instead */
        g_vsnprintf(formatted, sizeof(formatted), format, ap);
 
-       ei = ep_alloc(sizeof(expert_info_t));
-       ei->packet_num  = pinfo->fd->num;
-       ei->group               = group;
-       ei->severity    = severity;
-       ei->protocol    = ep_strdup(pinfo->current_proto);
-       ei->summary             = ep_strdup(formatted);
-       ei->pitem       = NULL;
-
        tree = expert_create_tree(pi, group, severity, formatted);
        ti = proto_tree_add_string(tree, hf_expert_msg, NULL, 0, 0, formatted);
        PROTO_ITEM_SET_GENERATED(ti);
@@ -183,15 +185,22 @@ packet_info *pinfo, proto_item *pi, int group, int severity, const char *format,
        ti = proto_tree_add_uint(tree, hf_expert_group, NULL, 0, 0, group);
        PROTO_ITEM_SET_GENERATED(ti);
 
+       if (!tap)
+               return;
+
+       ei = ep_alloc(sizeof(expert_info_t));
+       ei->packet_num  = pinfo->fd->num;
+       ei->group               = group;
+       ei->severity    = severity;
+       ei->protocol    = pinfo->current_proto; /* ep_strdup(pinfo->current_proto); it's a const */
+       ei->summary             = ep_strdup(formatted);
+       ei->pitem       = NULL;
+
        /* if we have a proto_item (not a faked item), set expert attributes to it */
        if(pi != NULL && PITEM_FINFO(pi) != NULL) {
         ei->pitem       = pi;
-               expert_set_item_flags(pi, group, severity);
        }
 
-       if (check_col(pinfo->cinfo, COL_EXPERT))
-         col_add_str(pinfo->cinfo, COL_EXPERT, val_to_str(severity, expert_severity_vals, "?%u?"));
-
        tap_queue_packet(expert_tap, pinfo, ei);
 }
 
index 4b89b45cc0b2af8a027ae40c2220322ac1bba7db..054d7e6c7c81b416420db11f9feae3e7dc5ab2d0 100644 (file)
@@ -37,7 +37,7 @@ typedef struct expert_info_s {
        guint32 packet_num;
        int group;
        int severity;
-       gchar * protocol;
+       const gchar * protocol;
        gchar * summary;
     proto_item *pitem;
 } expert_info_t;