Re-merged patch by Robert Scheck for tcpick <= 0.2.1, which fixes a double-free error detected by glibc on runtime during the execute of commands like "tcpick -wu -p -i eth0" causing a infinite loop after recording some sessions. The patch is originally from Cédric Delfosse . Further information: - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=319864 - http://sourceforge.net/mailarchive/message.php?msg_id=20647778 --- tcpick-0.2.1/src/tracker.c 2004-12-31 14:53:30.000000000 +0100 +++ tcpick-0.2.1/src/tracker.c.cpu-loop 2006-09-10 00:17:59.000000000 +0200 @@ -99,8 +99,11 @@ if( curr->next == NULL ) last_conn = prev_ring; - free_desc( &(curr->client) ); - free_desc( &(curr->server) ); + free_desc( &(curr->client), 1); + if (flags.writer.type == UNIQUE) + free_desc( &(curr->server), 0); + else + free_desc( &(curr->server), 1); S_free( curr ); conn = first_conn; @@ -124,7 +127,7 @@ count_opened--; } -int free_desc( struct HOST_DESC * desc ) +int free_desc( struct HOST_DESC * desc, int freedescfilename ) /* frees the host descriptor and closes the file */ { struct FRAGMENT * tmp; @@ -134,7 +137,7 @@ if (flags.writer.type == UNIQUE) desc->oth->file = NULL; } - if( desc->filename ) { + if( desc->filename && freedescfilename ) { S_free( desc->filename ); desc->filename = NULL; }