ports/net-mgmt/tcptrack/files/patch-no-stack-limits
Piotr Kubaj aa03dfb264 net-mgmt/tcptrack: fix build on armv7 / powerpc
TextUI.cc:306:17: error: format specifies type 'int' but the argument has type 'time_t' (aka 'long long') [-Werror,-Wformat]
  306 |                         printw("%ds",ic->getIdleSeconds());
      |                                 ~~   ^~~~~~~~~~~~~~~~~~~~
      |                                 %lld
TextUI.cc:308:17: error: format specifies type 'int' but the argument has type 'time_t' (aka 'long long') [-Werror,-Wformat]
  308 |                         printw("%dm",ic->getIdleSeconds()/60);
      |                                 ~~   ^~~~~~~~~~~~~~~~~~~~~~~
      |                                 %lld
TextUI.cc:310:17: error: format specifies type 'int' but the argument has type 'time_t' (aka 'long long') [-Werror,-Wformat]
  310 |                         printw("%dh",ic->getIdleSeconds()/3600);
      |                                 ~~   ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                                 %lld
3 errors generated.
2025-01-12 22:41:57 +01:00

175 lines
5.8 KiB
Text

Remove attempts to set arbitrary limits on stack-sizes for different
threads, which cause segfaults (due, presumably, to the limits being
too low).
-mi
--- src/defs.h 2010-09-27 19:02:01.000000000 -0400
+++ src/defs.h 2015-03-23 16:39:53.000000000 -0400
@@ -30,8 +30,2 @@
//#define FASTMODE_INTERVAL 250000000 // one quarter of a second
#define FASTMODE_INTERVAL 100000000 // one tenth of a second
-
-// stack sizes for the different threads
-#define SS_PB 2048 // PacketBuffer
-#define SS_S 4096 // Sniffer 2048 -> segfault on freebsd
-#define SS_TCC 4096 // TCContainer
-#define SS_TUI 5120 // TextUI. 4096 -> segfault on solaris
--- src/PacketBuffer.cc 2010-09-27 19:02:01.000000000 -0400
+++ src/PacketBuffer.cc 2015-03-23 16:23:36.000000000 -0400
@@ -53,14 +53,6 @@
// Start up maintenence thread
//
- pthread_attr_t attr;
- if( pthread_attr_init( &attr ) != 0 )
- throw GenericError("pthread_attr_init() failed");
-
- // TODO: there is no man page for this call on linux. Not sure what it
- // may return. On some systems it may not be supported at all
- // (should return ENOSYS). Should be safe to ignore return val.
- pthread_attr_setstacksize( &attr, SS_PB );
- if( pthread_create(&maint_thread_tid,&attr,pbmaint_thread_func,this) != 0 )
+ if (pthread_create(&maint_thread_tid, NULL, pbmaint_thread_func, this) != 0)
throw GenericError("pthread_create() returned an error");
--- src/Sniffer.cc 2010-09-27 19:02:22.000000000 -0400
+++ src/Sniffer.cc 2015-03-23 16:25:10.000000000 -0400
@@ -55,5 +66,5 @@
}
-void Sniffer::init(char *iface, char *fexp, char *test_file)
+void Sniffer::init(const char *iface, const char *fexp, const char *test_file)
{
assert(pcap_initted==false);
@@ -89,6 +102,4 @@
// prepare the filter
//
- struct bpf_program filter; // the filter for the sniffer
- char *filter_app = fexp; // The filter expression
bpf_u_int32 mask; // The netmask of our sniffing device
bpf_u_int32 net; // The IP of our sniffing device
@@ -102,28 +113,23 @@
mask = 0;
}
- if( pcap_compile(handle, &filter, filter_app, 0, net) == -1 )
- {
- pcap_close(handle);
- throw PcapError("pcap_compile",pcap_geterr(handle));
- }
- if( pcap_setfilter(handle, &filter) ) // apply filter to sniffer
- {
- pcap_freecode(&filter);
- pcap_close(handle);
- throw PcapError("pcap_setfilter",pcap_geterr(handle));
+ if (fexp != NULL && fexp[0] != '\0') {
+ struct bpf_program filter; // the filter for the sniffer
+ if (pcap_compile(handle, &filter, fexp, 0, net) == -1)
+ {
+ pcap_close(handle);
+ throw PcapError("pcap_compile", pcap_geterr(handle));
+ }
+ if (pcap_setfilter(handle, &filter)) // apply filter to sniffer
+ {
+ pcap_freecode(&filter);
+ pcap_close(handle);
+ throw PcapError("pcap_setfilter", pcap_geterr(handle));
+ }
+ pcap_freecode(&filter); // filter code not needed after setfilter
}
- pcap_freecode(&filter); // filter code not needed after setfilter
-
- pcap_initted=true;
-
- pthread_attr_t attr;
-
- if( pthread_attr_init( &attr ) != 0 )
- throw GenericError("pthread_attr_init() failed");
-
- pthread_attr_setstacksize( &attr, SS_S );
+ pcap_initted=true;
- if( pthread_create(&sniffer_tid,&attr,sniffer_thread_func,this) != 0 )
+ if (pthread_create(&sniffer_tid, NULL, sniffer_thread_func, this) != 0)
throw GenericError("pthread_create() failed.");
@@ -163,9 +170,11 @@
void Sniffer::processPacket( const pcap_pkthdr *header, const u_char *packet )
{
- assert( pthread_mutex_lock(&pb_mutex)==0 );
+
+ if (pthread_mutex_lock(&pb_mutex) != 0)
+ return;
if( pb==NULL )
{
- assert( pthread_mutex_unlock(&pb_mutex) == 0 );
+ pthread_mutex_unlock(&pb_mutex);
return;
}
@@ -193,5 +202,5 @@
pb->pushPacket(n);
- assert( pthread_mutex_unlock(&pb_mutex) == 0 );
+ pthread_mutex_unlock(&pb_mutex);
}
--- src/Sniffer.h 2010-09-27 19:02:22.000000000 -0400
+++ src/Sniffer.h 2015-03-23 15:07:57.000000000 -0400
@@ -43,5 +43,5 @@
// init performs some constructor-like activity. It is separate
// so that exceptions don't have to be thrown in the constructor.
- void init(char *iface, char *fexp, char *test_file);
+ void init(const char *iface, const char *fexp, const char *test_file);
// set the place where sniffed packets are sent for further
--- src/TCContainer.cc 2010-09-27 19:02:01.000000000 -0400
+++ src/TCContainer.cc 2015-03-23 16:23:05.000000000 -0400
@@ -47,15 +47,8 @@
state=TSTATE_IDLE;
- pthread_attr_t attr;
-
pthread_mutex_init( &conlist_lock, NULL );
pthread_mutex_init( &state_mutex, NULL );
- if( pthread_attr_init( &attr ) != 0 )
- throw GenericError("pthread_attr_init() failed");
-
- pthread_attr_setstacksize( &attr, SS_TCC );
-
- if( pthread_create(&maint_thread_tid,&attr,maint_thread_func,this) != 0 )
+ if( pthread_create(&maint_thread_tid, NULL, maint_thread_func, this) != 0 )
throw GenericError("pthread_create() failed.");
--- src/TextUI.cc 2011-08-03 13:34:45.000000000 -0400
+++ src/TextUI.cc 2015-03-23 16:24:20.000000000 -0400
@@ -80,11 +80,5 @@
run_displayer = true;
- pthread_attr_t attr;
- if( pthread_attr_init( &attr ) != 0 )
- throw GenericError("pthread_attr_init() failed");
-
- pthread_attr_setstacksize( &attr, SS_TUI );
-
- if( pthread_create(&displayer_tid,&attr,displayer_thread_func,this) != 0 )
+ if (pthread_create(&displayer_tid, NULL, displayer_thread_func, this) != 0)
throw GenericError("pthread_create() returned an error.");
@@ -309,11 +303,11 @@
move(row,58);
if( ic->getIdleSeconds() < 60 )
- printw("%ds",ic->getIdleSeconds());
+ printw("%ds",(int)(ic->getIdleSeconds()));
else if( ic->getIdleSeconds() > 59 )
- printw("%dm",ic->getIdleSeconds()/60);
+ printw("%dm",(int)(ic->getIdleSeconds())/60);
else if( ic->getIdleSeconds() > 3559 )
- printw("%dh",ic->getIdleSeconds()/3600);
+ printw("%dh",(int)(ic->getIdleSeconds())/3600);
move(row,63);
if( ic->activityToggle() )