--- /dev/null
+===================================================================
+--- 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/
+