Hello,

The test settings are:

server: iperf -s -u
client: iperf -c 192.168.1.2 -u -P 4 -t 10 -b 600M

iperf is ver. 2.0.5 which is the latest version to my knowledge,
and I cross-compiled it on our arch.

I found that some threads are not completed and hang there for ever.

I looked into this issue. I found that those iperf client
threads hang at Condition_Wait( &ReportDoneCond ).
The issue seems to be due to some condition variables are
not locked so there are race conditions.

I made a quick fix (see the following patch). The issue is now gone.

Thanks,
Paul

--- Reporter.c.ori      2012-04-12 16:43:05.000000000 +0800
+++ Reporter.c  2012-04-13 10:09:23.000000000 +0800
@@ -339,7 +339,9 @@
             // item
             while ( index == 0 ) {
                 Condition_Signal( &ReportCond );
+                Condition_Lock( ReportDoneCond );
                 Condition_Wait( &ReportDoneCond );
+                Condition_Unlock( ReportDoneCond );
                 index = agent->reporterindex;
             }
             agent->agentindex = 0;
@@ -347,7 +349,9 @@
         // Need to make sure that reporter is not about to be "lapped"
         while ( index - 1 == agent->agentindex ) {
             Condition_Signal( &ReportCond );
+            Condition_Lock( ReportDoneCond );
             Condition_Wait( &ReportDoneCond );
+            Condition_Unlock( ReportDoneCond );
             index = agent->reporterindex;
         }


------------------------------------------------------------------------------
For Developers, A Lot Can Happen In A Second.
Boundary is the first to Know...and Tell You.
Monitor Your Applications in Ultra-Fine Resolution. Try it FREE!
http://p.sf.net/sfu/Boundary-d2dvs2
_______________________________________________
Iperf-users mailing list
Iperf-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/iperf-users

Reply via email to