iperf: add patch from [http://lkml.org/lkml/2007/9/26/132 LKML] to fix locking bugs, bump release number
git-svn-id: svn://svn.openwrt.org/openwrt/packages@9093 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
67dda08ce7
commit
56b0dceb28
@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=iperf
|
PKG_NAME:=iperf
|
||||||
PKG_VERSION:=2.0.2
|
PKG_VERSION:=2.0.2
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=2
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=http://dast.nlanr.net/Projects/Iperf2.0
|
PKG_SOURCE_URL:=http://dast.nlanr.net/Projects/Iperf2.0
|
||||||
|
92
net/iperf/patches/001-locking_fixes.patch
Executable file
92
net/iperf/patches/001-locking_fixes.patch
Executable file
@ -0,0 +1,92 @@
|
|||||||
|
===================================================================
|
||||||
|
--- iperf-2.0.2.orig/compat/Thread.c
|
||||||
|
+++ iperf-2.0.2/compat/Thread.c
|
||||||
|
@@ -405,9 +405,6 @@ int thread_numuserthreads( void ) {
|
||||||
|
void thread_rest ( void ) {
|
||||||
|
#if defined( HAVE_THREAD )
|
||||||
|
#if defined( HAVE_POSIX_THREAD )
|
||||||
|
- // TODO add checks for sched_yield or pthread_yield and call that
|
||||||
|
- // if available
|
||||||
|
- usleep( 0 );
|
||||||
|
#else // Win32
|
||||||
|
SwitchToThread( );
|
||||||
|
#endif
|
||||||
|
Index: iperf-2.0.2/src/Reporter.c
|
||||||
|
===================================================================
|
||||||
|
--- iperf-2.0.2.orig/src/Reporter.c
|
||||||
|
+++ iperf-2.0.2/src/Reporter.c
|
||||||
|
@@ -111,6 +111,7 @@ report_statistics multiple_reports[kRepo
|
||||||
|
char buffer[64]; // Buffer for printing
|
||||||
|
ReportHeader *ReportRoot = NULL;
|
||||||
|
extern Condition ReportCond;
|
||||||
|
+extern Condition ReportDoneCond;
|
||||||
|
int reporter_process_report ( ReportHeader *report );
|
||||||
|
void process_report ( ReportHeader *report );
|
||||||
|
int reporter_handle_packet( ReportHeader *report );
|
||||||
|
@@ -338,7 +339,7 @@ void ReportPacket( ReportHeader* agent,
|
||||||
|
// item
|
||||||
|
while ( index == 0 ) {
|
||||||
|
Condition_Signal( &ReportCond );
|
||||||
|
- thread_rest();
|
||||||
|
+ Condition_Wait( &ReportDoneCond );
|
||||||
|
index = agent->reporterindex;
|
||||||
|
}
|
||||||
|
agent->agentindex = 0;
|
||||||
|
@@ -346,7 +347,7 @@ void ReportPacket( ReportHeader* agent,
|
||||||
|
// Need to make sure that reporter is not about to be "lapped"
|
||||||
|
while ( index - 1 == agent->agentindex ) {
|
||||||
|
Condition_Signal( &ReportCond );
|
||||||
|
- thread_rest();
|
||||||
|
+ Condition_Wait( &ReportDoneCond );
|
||||||
|
index = agent->reporterindex;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -553,6 +554,7 @@ void reporter_spawn( thread_Settings *th
|
||||||
|
}
|
||||||
|
Condition_Unlock ( ReportCond );
|
||||||
|
|
||||||
|
+again:
|
||||||
|
if ( ReportRoot != NULL ) {
|
||||||
|
ReportHeader *temp = ReportRoot;
|
||||||
|
//Condition_Unlock ( ReportCond );
|
||||||
|
@@ -575,9 +577,12 @@ void reporter_spawn( thread_Settings *th
|
||||||
|
// finished with report so free it
|
||||||
|
free( temp );
|
||||||
|
Condition_Unlock ( ReportCond );
|
||||||
|
+ Condition_Signal( &ReportDoneCond );
|
||||||
|
+ if (ReportRoot)
|
||||||
|
+ goto again;
|
||||||
|
}
|
||||||
|
- // yield control of CPU is another thread is waiting
|
||||||
|
- thread_rest();
|
||||||
|
+ Condition_Signal( &ReportDoneCond );
|
||||||
|
+ usleep(10000);
|
||||||
|
} else {
|
||||||
|
//Condition_Unlock ( ReportCond );
|
||||||
|
}
|
||||||
|
Index: iperf-2.0.2/src/main.cpp
|
||||||
|
===================================================================
|
||||||
|
--- iperf-2.0.2.orig/src/main.cpp
|
||||||
|
+++ iperf-2.0.2/src/main.cpp
|
||||||
|
@@ -96,6 +96,7 @@ extern "C" {
|
||||||
|
// records being accessed in a report and also to
|
||||||
|
// serialize modification of the report list
|
||||||
|
Condition ReportCond;
|
||||||
|
+ Condition ReportDoneCond;
|
||||||
|
}
|
||||||
|
|
||||||
|
// global variables only accessed within this file
|
||||||
|
@@ -141,6 +142,7 @@ int main( int argc, char **argv ) {
|
||||||
|
|
||||||
|
// Initialize global mutexes and conditions
|
||||||
|
Condition_Initialize ( &ReportCond );
|
||||||
|
+ Condition_Initialize ( &ReportDoneCond );
|
||||||
|
Mutex_Initialize( &groupCond );
|
||||||
|
Mutex_Initialize( &clients_mutex );
|
||||||
|
|
||||||
|
-
|
||||||
|
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
|
||||||
|
the body of a message to majordomo@vger.kernel.org
|
||||||
|
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
||||||
|
Please read the FAQ at http://www.tux.org/lkml/
|
||||||
|
|
@ -1,20 +0,0 @@
|
|||||||
Index: iperf-2.0.2/compat/Thread.c
|
|
||||||
===================================================================
|
|
||||||
--- iperf-2.0.2.orig/compat/Thread.c 2007-09-26 15:01:48.000000000 +0200
|
|
||||||
+++ iperf-2.0.2/compat/Thread.c 2007-09-26 15:01:49.000000000 +0200
|
|
||||||
@@ -405,9 +405,13 @@
|
|
||||||
void thread_rest ( void ) {
|
|
||||||
#if defined( HAVE_THREAD )
|
|
||||||
#if defined( HAVE_POSIX_THREAD )
|
|
||||||
- // TODO add checks for sched_yield or pthread_yield and call that
|
|
||||||
- // if available
|
|
||||||
+
|
|
||||||
+#if defined( _POSIX_PRIORITY_SCHEDULING )
|
|
||||||
+ sched_yield();
|
|
||||||
+#else
|
|
||||||
usleep( 0 );
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#else // Win32
|
|
||||||
SwitchToThread( );
|
|
||||||
#endif
|
|
Loading…
x
Reference in New Issue
Block a user