Ethereal-dev: [ethereal-dev] More about redissect/rescan and state info

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Gilbert Ramirez <gram@xxxxxxxxxx>
Date: Mon, 11 Sep 2000 10:40:29 -0400
Richard, you're latest modification to file.c seems puzzling to me.
I think your one-line addition was unnecessary.

You added:

diff -u -r1.217 -r1.218
--- file.c	2000/09/10 06:44:33	1.217
+++ file.c	2000/09/11 07:33:55	1.218
@@ -1,7 +1,7 @@
 /* file.c
  * File I/O routines
  *
- * $Id: file.c,v 1.217 2000/09/10 06:44:33 guy Exp $
+ * $Id: file.c,v 1.218 2000/09/11 07:33:55 sharpe Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@xxxxxxxx>
@@ -978,6 +978,15 @@
        * data (the per-frame data itself was freed by
        * "init_all_protocols()"). */
       fdata->flags.visited = 0;
+      fdata->pfd = NULL;
+    }
+


So now the midsection of rescan_packets() looks like:

    if (redissect) {
      /* Since all state for the frame was destroyed, mark the frame
       * as not visited, and null out the pointer to the per-frame
       * data (the per-frame data itself was freed by
       * "init_all_protocols()"). */
      fdata->flags.visited = 0;
      fdata->pfd = NULL;		<---- your addition
    }

    /* If there is any per-frame data, delete that, as what it points to 
     * has gone as well.
     */

    if (fdata->pfd) {
      g_slist_free(fdata->pfd);
      fdata->pfd = NULL;
    }


Isn't the line that you added taken care of by the next if() statement?


--gilbert