updated test results on Solaris
Hi, I thought I’d give an update also on the progress of the Solaris port in the same vein as Mark did for the Linux one. Thanks to the work of Mark on libkqueue, I’ve now been able to build and run the test suite with proper block support on Solaris using clang 2.8. I used the most recent versions of libkqueue, libdispatch, libpthread_workqueue and compiler-rt, build and checkout instructions are below for reference if someone else wants to run it - prerequisite is a clang/llvm 2.8 compiler (which for the record builds fine using gcc 4.5.1). The tests below were run on an 8-core Nehalem machine (16 virtual cores) and built everything for 64-bits. All tests except one succeed, which is for the average jitter in the dispatch_drift test (perhaps the threshold is just a bit too aggressive, the actual is almost always 0.0002 rather than 0.0001…): --- Actual: 0.000195 Expected: <0.000100 [FAIL] average jitter (dispatch_drift.c:87) dispatch_drift.c:87 Actual: 0.000001 Expected: <0.000100 [PASS] average drift PASS: dispatch_drift --- There is only two required patches (attached below), one small for libpthread_workqueue (which has been submitted to Mark), but the other one is for disabling __private_extern__ completely while building with clang - the problem is that the linker used by clang (it falls back to the gnu linker AFAICT) does not properly support symbol visibility attributes on Solaris - this was fixed in the private-extern.m4 script previously for the “visibility(“hidden”)” flag, but as “__private_extern__” is supported by clang (but not by the gcc linker), linkage fails for the symbols declared as __private_extern__. I’m trying to figure out how to get clang to use the native Solaris linker instead (without success so far), as that should allow for proper linkage without disabling symbol visibility. The proper workaround (to check whether __private_extern__ is _really_ supported at link time), is unfortunately difficult to achieve - what is needed is to try AC_TRY_LINK() but with *two* input source files (I do have a perfectly minimized test for it), but there seems to be no way to set up such a ‘complex’ test unfortunately - if anyone knows how to provide two input files to AC_TRY_LINK, I’m all ears... I’m leaning towards having a manual option for turning the __private_extern__ support off, but it seems a bit heavy-handed. Cheers, Joakim ————————— -bash-3.00$ clang --version clang version 2.8 (tags/RELEASE_28 123229) Target: i386-pc-solaris2.10 Thread model: posix -bash-3.00$ -bash-3.00$ $MAKE check Making check in dispatch gmake[1]: Entering directory `/home/jocke/gcd/cb31/libdispatch/trunk/dispatch' gmake[1]: Nothing to be done for `check'. gmake[1]: Leaving directory `/home/jocke/gcd/cb31/libdispatch/trunk/dispatch' Making check in man gmake[1]: Entering directory `/home/jocke/gcd/cb31/libdispatch/trunk/man' gmake[1]: Nothing to be done for `check'. gmake[1]: Leaving directory `/home/jocke/gcd/cb31/libdispatch/trunk/man' Making check in src gmake[1]: Entering directory `/home/jocke/gcd/cb31/libdispatch/trunk/src' /opt/csw/bin/gmake check-am gmake[2]: Entering directory `/home/jocke/gcd/cb31/libdispatch/trunk/src' gmake[2]: Nothing to be done for `check-am'. gmake[2]: Leaving directory `/home/jocke/gcd/cb31/libdispatch/trunk/src' gmake[1]: Leaving directory `/home/jocke/gcd/cb31/libdispatch/trunk/src' Making check in testing gmake[1]: Entering directory `/home/jocke/gcd/cb31/libdispatch/trunk/testing' /opt/csw/bin/gmake check-TESTS gmake[2]: Entering directory `/home/jocke/gcd/cb31/libdispatch/trunk/testing' ================================================== [TEST] Dispatch (Public) API [PID] 16294 ================================================== Actual: 412950 Expected: 412950 [PASS] dispatch_get_main_queue PASS: dispatch_api ================================================== [TEST] Dispatch C99 [PID] 16310 ================================================== Actual: 412950 Expected: 412950 [PASS] dispatch_get_main_queue PASS: dispatch_c99 ================================================== [TEST] Dispatch Cascade [PID] 16329 ================================================== maxcount = 3208 * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * PASS: dispatch_cascade ================================================== [TEST] Dispatch Debug [PID] 16345 ================================================== PASS: dispatch_debug ================================================== [TEST] Dispatch Priority [PID] 16361 ================================================== LOW: 46 ***************************** DEFAULT: 36 *********************** HIGH: 110 ********************************************************************* Actual: 192 Expected: 192 [PASS] blocks completed Actual: 46 Expected: <110 [PASS] high priority precedence PASS: dispatch_priority ================================================== [TEST] Dispatch Priority (Set Target Queue) [PID] 16377 ================================================== Actual: 414a60 Expected: 414a60 [PASS] q[i] Actual: 417560 Expected: 417560 [PASS] q[i] Actual: 417610 Expected: 417610 [PASS] q[i] LOW: 55 *********************************** DEFAULT: 64 **************************************** HIGH: 73 ********************************************** Actual: 192 Expected: 192 [PASS] blocks completed Actual: 55 Expected: <73 [PASS] high priority precedence PASS: dispatch_priority2 ================================================== [TEST] Dispatch Starfish [PID] 16393 ================================================== lap: 10 count: 1000 delta: 680694550 ns math: 340.007268 ns / lap Actual: 340 Expected: <1000 [PASS] Latency lap: 9 count: 1000 delta: 587094143 ns math: 293.253818 ns / lap Actual: 293 Expected: <1000 [PASS] Latency lap: 8 count: 1000 delta: 810081631 ns math: 404.636179 ns / lap Actual: 404 Expected: <1000 [PASS] Latency lap: 7 count: 1000 delta: 512007899 ns math: 255.748201 ns / lap Actual: 255 Expected: <1000 [PASS] Latency lap: 6 count: 1000 delta: 462883519 ns math: 231.210549 ns / lap Actual: 231 Expected: <1000 [PASS] Latency lap: 5 count: 1000 delta: 475580888 ns math: 237.552891 ns / lap Actual: 237 Expected: <1000 [PASS] Latency lap: 4 count: 1000 delta: 437686340 ns math: 218.624545 ns / lap Actual: 218 Expected: <1000 [PASS] Latency lap: 3 count: 1000 delta: 834601783 ns math: 416.884007 ns / lap Actual: 416 Expected: <1000 [PASS] Latency lap: 2 count: 1000 delta: 683405606 ns math: 341.361442 ns / lap Actual: 341 Expected: <1000 [PASS] Latency lap: 1 count: 1000 delta: 559356398 ns math: 279.398800 ns / lap Actual: 279 Expected: <1000 [PASS] Latency PASS: dispatch_starfish ================================================== [TEST] Dispatch Queue Finalizer [PID] 16434 ================================================== Actual: 414db0 Expected: 414db0 [PASS] dispatch_queue_new Actual: c59ff648302c6300 Expected: c59ff648302c6300 [PASS] finalizer ran PASS: queue_finalizer ================================================== [TEST] Dispatch After [PID] 16450 ================================================== Actual: 0 Expected: <500073671 [PASS] can't finish faster than 5.5s Actual: 0 Expected: <499927056 [PASS] must finish faster than 6.5s Actual: 0 Expected: <500054705 [PASS] can't finish faster than 1.5s Actual: 0 Expected: <499946039 [PASS] must finish faster than 2.5s Actual: 0 Expected: <18204 [PASS] can't finish faster than 0s Actual: 0 Expected: <499982964 [PASS] must finish faster than .5s PASS: dispatch_after ================================================== [TEST] Dispatch Apply [PID] 16466 ================================================== Actual: fffffd7fff290530 Expected: fffffd7fff290530 [PASS] dispatch_get_concurrent_queue Actual: 32 Expected: 32 [PASS] count PASS: dispatch_apply ================================================== [TEST] Timer drift test [PID] 16482 ================================================== Actual: 414f10 Expected: 414f10 [PASS] DISPATCH_SOURCE_TYPE_TIMER 1: jitter 0.000000, drift 0.000000 2: jitter -0.000205, drift -0.000205 3: jitter -0.000202, drift 0.000003 4: jitter -0.000207, drift -0.000005 5: jitter -0.000204, drift 0.000003 6: jitter -0.000201, drift 0.000003 7: jitter -0.000211, drift -0.000010 8: jitter -0.000201, drift 0.000010 9: jitter -0.000201, drift -0.000000 10: jitter -0.000202, drift -0.000001 11: jitter -0.000200, drift 0.000002 12: jitter -0.000201, drift -0.000001 13: jitter -0.000201, drift 0.000000 14: jitter -0.000208, drift -0.000007 15: jitter -0.000202, drift 0.000006 16: jitter -0.000022, drift 0.000180 17: jitter -0.000008, drift 0.000014 18: jitter -0.000207, drift -0.000199 19: jitter -0.000002, drift 0.000205 20: jitter -0.000203, drift -0.000201 21: jitter -0.000203, drift 0.000000 22: jitter -0.000207, drift -0.000004 23: jitter -0.000206, drift 0.000001 24: jitter -0.000210, drift -0.000004 25: jitter -0.000205, drift 0.000005 26: jitter -0.000002, drift 0.000203 27: jitter -0.000011, drift -0.000009 28: jitter -0.000205, drift -0.000194 29: jitter -0.000004, drift 0.000201 30: jitter -0.000008, drift -0.000004 31: jitter -0.000203, drift -0.000195 32: jitter -0.000206, drift -0.000003 33: jitter -0.000200, drift 0.000006 34: jitter -0.000206, drift -0.000006 35: jitter -0.000203, drift 0.000003 36: jitter -0.000001, drift 0.000202 37: jitter -0.000007, drift -0.000006 38: jitter -0.000202, drift -0.000195 39: jitter -0.000019, drift 0.000183 40: jitter -0.000012, drift 0.000007 41: jitter -0.000201, drift -0.000189 42: jitter -0.000202, drift -0.000001 43: jitter -0.000206, drift -0.000004 44: jitter -0.000210, drift -0.000004 45: jitter -0.000207, drift 0.000003 46: jitter -0.000001, drift 0.000206 47: jitter -0.000006, drift -0.000005 48: jitter -0.000212, drift -0.000206 49: jitter -0.000005, drift 0.000207 50: jitter -0.000006, drift -0.000001 51: jitter -0.000204, drift -0.000198 52: jitter -0.000206, drift -0.000002 53: jitter -0.000206, drift 0.000000 54: jitter -0.000210, drift -0.000004 55: jitter -0.000205, drift 0.000005 56: jitter -0.000205, drift 0.000000 57: jitter -0.000008, drift 0.000197 58: jitter -0.000205, drift -0.000197 59: jitter -0.000208, drift -0.000003 60: jitter -0.000004, drift 0.000204 61: jitter -0.000203, drift -0.000199 62: jitter -0.000208, drift -0.000005 63: jitter -0.000208, drift 0.000000 64: jitter -0.000218, drift -0.000010 65: jitter -0.000204, drift 0.000014 66: jitter -0.000004, drift 0.000200 67: jitter -0.000009, drift -0.000005 68: jitter -0.000207, drift -0.000198 69: jitter -0.000003, drift 0.000204 70: jitter -0.000005, drift -0.000002 71: jitter -0.000206, drift -0.000201 72: jitter -0.000205, drift 0.000001 73: jitter -0.000205, drift 0.000000 74: jitter -0.000196, drift 0.000009 75: jitter -0.000204, drift -0.000008 76: jitter -0.000206, drift -0.000002 77: jitter -0.000207, drift -0.000001 78: jitter -0.000201, drift 0.000006 79: jitter -0.000002, drift 0.000199 80: jitter -0.000019, drift -0.000017 81: jitter -0.000206, drift -0.000187 82: jitter -0.000210, drift -0.000004 83: jitter -0.000213, drift -0.000003 84: jitter -0.000233, drift -0.000020 85: jitter -0.000010, drift 0.000223 86: jitter -0.000205, drift -0.000195 87: jitter -0.000213, drift -0.000008 88: jitter -0.000211, drift 0.000002 89: jitter -0.000216, drift -0.000005 90: jitter -0.000017, drift 0.000199 91: jitter -0.000210, drift -0.000193 92: jitter -0.000026, drift 0.000184 93: jitter -0.000213, drift -0.000187 94: jitter -0.000019, drift 0.000194 95: jitter -0.000207, drift -0.000188 96: jitter -0.000206, drift 0.000001 97: jitter -0.000214, drift -0.000008 98: jitter -0.000208, drift 0.000006 99: jitter -0.000201, drift 0.000007 100: jitter -0.000203, drift -0.000002 101: jitter -0.000201, drift 0.000002 102: jitter -0.000220, drift -0.000019 103: jitter -0.000210, drift 0.000010 104: jitter -0.000039, drift 0.000171 105: jitter -0.000016, drift 0.000023 106: jitter -0.000210, drift -0.000194 107: jitter -0.000214, drift -0.000004 108: jitter -0.000226, drift -0.000012 109: jitter -0.000008, drift 0.000218 110: jitter -0.000012, drift -0.000004 111: jitter -0.000223, drift -0.000211 112: jitter -0.000012, drift 0.000211 113: jitter -0.000210, drift -0.000198 114: jitter -0.000225, drift -0.000015 115: jitter -0.000205, drift 0.000020 116: jitter -0.000206, drift -0.000001 117: jitter -0.000218, drift -0.000012 118: jitter -0.000223, drift -0.000005 119: jitter -0.000212, drift 0.000011 120: jitter -0.000229, drift -0.000017 121: jitter -0.000213, drift 0.000016 122: jitter -0.000019, drift 0.000194 123: jitter -0.000023, drift -0.000004 124: jitter -0.000247, drift -0.000224 125: jitter -0.000208, drift 0.000039 126: jitter -0.000207, drift 0.000001 127: jitter -0.000219, drift -0.000012 128: jitter -0.000209, drift 0.000010 129: jitter 0.000000, drift 0.000209 130: jitter -0.000015, drift -0.000015 131: jitter -0.000207, drift -0.000192 132: jitter -0.000027, drift 0.000180 133: jitter -0.000007, drift 0.000020 134: jitter -0.000235, drift -0.000228 135: jitter -0.000226, drift 0.000009 136: jitter -0.000211, drift 0.000015 137: jitter -0.000219, drift -0.000008 138: jitter -0.000202, drift 0.000017 139: jitter -0.000021, drift 0.000181 140: jitter -0.000205, drift -0.000184 141: jitter -0.000211, drift -0.000006 142: jitter -0.000023, drift 0.000188 143: jitter -0.000012, drift 0.000011 144: jitter -0.000255, drift -0.000243 145: jitter -0.000027, drift 0.000228 146: jitter -0.000216, drift -0.000189 147: jitter -0.000210, drift 0.000006 148: jitter -0.000211, drift -0.000001 149: jitter -0.000208, drift 0.000003 150: jitter -0.000020, drift 0.000188 151: jitter -0.000204, drift -0.000184 152: jitter -0.000220, drift -0.000016 153: jitter -0.000208, drift 0.000012 154: jitter -0.000223, drift -0.000015 155: jitter -0.000209, drift 0.000014 156: jitter -0.000210, drift -0.000001 157: jitter -0.000215, drift -0.000005 158: jitter -0.000210, drift 0.000005 159: jitter -0.000211, drift -0.000001 160: jitter -0.000025, drift 0.000186 161: jitter -0.000207, drift -0.000182 162: jitter -0.000014, drift 0.000193 163: jitter -0.000011, drift 0.000003 164: jitter -0.000227, drift -0.000216 165: jitter -0.000013, drift 0.000214 166: jitter -0.000218, drift -0.000205 167: jitter -0.000213, drift 0.000005 168: jitter -0.000042, drift 0.000171 169: jitter -0.000232, drift -0.000190 170: jitter -0.000011, drift 0.000221 171: jitter -0.000201, drift -0.000190 172: jitter -0.000224, drift -0.000023 173: jitter -0.000203, drift 0.000021 174: jitter -0.000015, drift 0.000188 175: jitter -0.000200, drift -0.000185 176: jitter -0.000017, drift 0.000183 177: jitter -0.000206, drift -0.000189 178: jitter -0.000038, drift 0.000168 179: jitter -0.000222, drift -0.000184 180: jitter -0.000022, drift 0.000200 181: jitter -0.000220, drift -0.000198 182: jitter -0.000016, drift 0.000204 183: jitter -0.000213, drift -0.000197 184: jitter -0.000209, drift 0.000004 185: jitter -0.000217, drift -0.000008 186: jitter -0.000208, drift 0.000009 187: jitter -0.000216, drift -0.000008 188: jitter -0.000030, drift 0.000186 189: jitter -0.000235, drift -0.000205 190: jitter -0.000013, drift 0.000222 191: jitter -0.000208, drift -0.000195 192: jitter -0.000225, drift -0.000017 193: jitter -0.000204, drift 0.000021 194: jitter -0.000235, drift -0.000031 195: jitter -0.000206, drift 0.000029 196: jitter -0.000219, drift -0.000013 197: jitter -0.000220, drift -0.000001 198: jitter -0.000210, drift 0.000010 199: jitter -0.000201, drift 0.000009 200: jitter -0.000027, drift 0.000174 201: jitter -0.000203, drift -0.000176 202: jitter -0.000224, drift -0.000021 203: jitter -0.000215, drift 0.000009 204: jitter -0.000225, drift -0.000010 205: jitter -0.000210, drift 0.000015 206: jitter -0.000209, drift 0.000001 207: jitter -0.000215, drift -0.000006 208: jitter -0.000020, drift 0.000195 209: jitter -0.000221, drift -0.000201 210: jitter -0.000025, drift 0.000196 211: jitter -0.000224, drift -0.000199 212: jitter -0.000227, drift -0.000003 213: jitter -0.000218, drift 0.000009 214: jitter -0.000219, drift -0.000001 215: jitter -0.000214, drift 0.000005 216: jitter -0.000007, drift 0.000207 217: jitter -0.000214, drift -0.000207 218: jitter -0.000207, drift 0.000007 219: jitter -0.008142, drift -0.007935 220: jitter -0.000574, drift 0.007568 221: jitter -0.000061, drift 0.000513 222: jitter -0.000206, drift -0.000145 223: jitter -0.000008, drift 0.000198 224: jitter -0.000216, drift -0.000208 225: jitter -0.000202, drift 0.000014 226: jitter -0.000200, drift 0.000002 227: jitter -0.000201, drift -0.000001 228: jitter -0.000205, drift -0.000004 229: jitter -0.000206, drift -0.000001 230: jitter -0.000204, drift 0.000002 231: jitter -0.000201, drift 0.000003 232: jitter -0.000219, drift -0.000018 233: jitter -0.000214, drift 0.000005 234: jitter -0.000227, drift -0.000013 235: jitter -0.000216, drift 0.000011 236: jitter -0.000204, drift 0.000012 237: jitter -0.000201, drift 0.000003 238: jitter -0.000204, drift -0.000003 239: jitter -0.000216, drift -0.000012 240: jitter -0.000211, drift 0.000005 241: jitter -0.000204, drift 0.000007 242: jitter -0.000208, drift -0.000004 243: jitter -0.000207, drift 0.000001 244: jitter -0.000227, drift -0.000020 245: jitter -0.000215, drift 0.000012 246: jitter -0.000208, drift 0.000007 247: jitter -0.000214, drift -0.000006 248: jitter -0.000228, drift -0.000014 249: jitter -0.000215, drift 0.000013 250: jitter -0.000219, drift -0.000004 Actual: 0.000195 Expected: <0.000100 [FAIL] average jitter (dispatch_drift.c:87) dispatch_drift.c:87 Actual: 0.000001 Expected: <0.000100 [PASS] average drift PASS: dispatch_drift ================================================== [TEST] Dispatch Group [PID] 16515 ================================================== Actual: 415990 Expected: 415990 [PASS] dispatch_group_async Actual: 415990 Expected: 415990 [PASS] dispatch_group_async sleeping... sleeping... sleeping... Actual: 0 Expected: 0 [PASS] dispatch_group_wait done. done. done. Actual: 0 Expected: 0 [PASS] dispatch_group_wait Actual: 415990 Expected: 415990 [PASS] dispatch_group_async Actual: 4134d0 Expected: 4134d0 [PASS] Notification Received PASS: dispatch_group ================================================== [TEST] Dispatch Ping Pong [PID] 16531 ================================================== Actual: 414660 Expected: 414660 [PASS] dispatch_queue_create(ping) Actual: 414710 Expected: 414710 [PASS] dispatch_queue_create(pong) Actual: 4147c0 Expected: 4147c0 [PASS] dispatch_group_create Actual: 1000000 Expected: 1000000 [PASS] count PASS: dispatch_pingpong ================================================== [TEST] Dispatch Source Read [PID] 16547 ================================================== Actual: 4902f0 Expected: 4902f0 [PASS] dispatch_get_main_queue Actual: 491ce0 Expected: 491ce0 [PASS] DISPATCH_SOURCE_TYPE_READ bytes available: 1 bytes read: 512000 bytes available: 1 bytes read: 512000 bytes available: 1 bytes read: 512000 bytes available: 1 bytes read: 512000 bytes available: 1 bytes read: 438813 Actual: 0 Expected: 0 [PASS] EOF Actual: 2486813 Expected: 2486813 [PASS] Bytes read Actual: 0 Expected: 0 [PASS] close PASS: dispatch_read ================================================== [TEST] Dispatch Reader/Writer Queues [PID] 16563 ================================================== PASS: dispatch_readsync ================================================== [TEST] Dispatch Semaphore [PID] 16579 ================================================== Actual: 10000 Expected: 10000 [PASS] count PASS: dispatch_sema ================================================== [TEST] Dispatch Source Timer, bit 31 [PID] 16595 ================================================== Actual: 413150 Expected: 413150 [PASS] dispatch_get_main_queue Actual: 414b30 Expected: 414b30 [PASS] DISPATCH_SOURCE_TYPE_TIMER Actual: 2 Expected: <4 [PASS] elapsed time < 4s Actual: 1 Expected: <2 [PASS] elapsed time > 2s PASS: dispatch_timer_bit31 ================================================== [TEST] Dispatch Source Timer, bit 63 [PID] 16611 ================================================== 0 PASS: dispatch_timer_bit63 ================================================== [TEST] Dispatch C++ [PID] 16627 ================================================== Actual: 4128d0 Expected: 4128d0 [PASS] dispatch_get_main_queue PASS: dispatch_plusplus =================== All 19 tests passed =================== gmake[2]: Leaving directory `/home/jocke/gcd/cb31/libdispatch/trunk/testing' gmake[1]: Leaving directory `/home/jocke/gcd/cb31/libdispatch/trunk/testing' gmake[1]: Entering directory `/home/jocke/gcd/cb31/libdispatch/trunk' gmake[1]: Nothing to be done for `check-am'. gmake[1]: Leaving directory `/home/jocke/gcd/cb31/libdispatch/trunk' -bash-3.00$ ————————— The complete build was done with (replace the two ‘cp’:s below with applying the patches instead): —————— export XX_SOURCE_ROOT=/home/jocke/gcd/cb31 export CC=clang export CXX=clang++ export NM=llvm-nm export LD=clang export PKG_CONFIG_PATH=$XX_SOURCE_ROOT/usr/local/lib/pkgconfig export SVN=/opt/csw/bin/svn export MAKE=/opt/csw/bin/gmake export DESTDIR=$XX_SOURCE_ROOT mkdir $XX_SOURCE_ROOT mkdir $XX_SOURCE_ROOT/build cd $XX_SOURCE_ROOT $SVN co svn://mark.heily.com/libkqueue libkqueue $SVN co svn://mark.heily.com/libpthread_workqueue libpthread_workqueue $SVN co http://svn.macosforge.org/repository/libdispatch libdispatch $SVN co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt cd $XX_SOURCE_ROOT/libpthread_workqueue/trunk/ cp /home/jocke/gcd/cb5/libpthread_workqueue/trunk/pthread_workqueue.c . ./configure DESTDIR=$XX_SOURCE_ROOT $MAKE $MAKE install DESTDIR=$XX_SOURCE_ROOT cd $XX_SOURCE_ROOT/libkqueue/trunk/ ./configure $MAKE -j16 CFLAGS="-I./include -I./src/common -fpic -Wall -Werror -g -std=c99 -D_XOPEN_SOURCE=600 -m64 -D__EXTENSIONS__" $MAKE install DESTDIR=$XX_SOURCE_ROOT cd $XX_SOURCE_ROOT/build cmake -DCMAKE_C_FLAGS=-m64 -DCMAKE_CXX_FLAGS=-m64 ../compiler-rt/ $MAKE -j16 $MAKE install DESTDIR=$XX_SOURCE_ROOT cd $XX_SOURCE_ROOT/libdispatch/trunk/ cp /home/jocke/gcd/cb21/libdispatch/trunk/m4/private-extern.m4 m4/private-extern.m4 sh autogen.sh ./configure CFLAGS="-m64 -I$XX_SOURCE_ROOT/usr/local/include -L$XX_SOURCE_ROOT/usr/local/lib -R$XX_SOURCE_ROOT/usr/local/lib" CXXFLAGS=-m64 --with-blocks-runtime=$XX_SOURCE_ROOT/usr/local/lib $MAKE install -j16 CFLAGS="-m64 -I$XX_SOURCE_ROOT/usr/local/include/kqueue -I$XX_SOURCE_ROOT/usr/local/include -L$XX_SOURCE_ROOT/usr/local/lib -R$XX_SOURCE_ROOT/usr/local/lib -fblocks" CXXFLAGS="-m64 -fblocks" ——— Following diffs; libpthread_workqueue (due to RLIMIT_NPROC unavailability on Solaris, fix provided to Mark); =================================================================== --- pthread_workqueue.c (revision 36) +++ pthread_workqueue.c (working copy) @@ -78,6 +78,9 @@ #define PTHREAD_WORKQUEUE_SIG 0xBEBEBEBE #define PTHREAD_WORKQUEUE_ATTR_SIG 0xBEBEBEBE +/* The allowed number of threads if RLIMIT_NPROC is not availble */ +#define RLIMIT_NPROC_DEFAULT_THREAD_LIMIT 128 + struct work { STAILQ_ENTRY(work) item_entry; void (*func)(void *); @@ -413,14 +416,18 @@ static unsigned int get_process_limit(void) { +#ifdef RLIMIT_NPROC struct rlimit rlim; if (getrlimit(RLIMIT_NPROC, &rlim) < 0) { dbg_perror("getrlimit(2)"); - return (50); + return (RLIMIT_NPROC_DEFAULT_THREAD_LIMIT); } else { return (rlim.rlim_max); } +#else + return (RLIMIT_NPROC_DEFAULT_THREAD_LIMIT); +#endif } static unsigned int ———————— and for libdispatch, disabling __private_extern__ as described above: ———————— Index: m4/private-extern.m4 =================================================================== --- m4/private-extern.m4 (revision 197) +++ m4/private-extern.m4 (working copy) @@ -19,15 +19,7 @@ [dispatch_cv_private_extern=yes], [dispatch_cv_private_extern=no])]) -if test $dispatch_cv_private_extern = yes; then - AC_DEFINE(HAVE_PRIVATE_EXTERN, 1, Define if __private_extern__ present) -elif test $dispatch_cv_hidden_visibility_attribute = yes; then - AC_DEFINE(HAVE_PRIVATE_EXTERN, 1, Define if __private_extern__ present) - AC_DEFINE([__private_extern__], [extern __attribute__ ((visibility ("hidden")))], - [Define to a replacement for __private_extern]) -else AC_DEFINE([__private_extern__], [extern], [Define to a replacement for __private_extern]) -fi ]) ————————
For the record, 50 complete test runs of the test suite gave the below fairly robust results… (the drift jitter succeeded a few times) (lack of support for high priority precedence in pthread_workqueue is another known issue as priorities aren’t implemented yet) Cheers, Joakim —————————- bash-3.00$ for i in {1..50} do $MAKE check | grep “FAIL” done . . . [FAIL] average jitter (dispatch_drift.c:87) [FAIL] high priority precedence (dispatch_priority.c:83) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] high priority precedence (dispatch_priority.c:83) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] high priority precedence (dispatch_priority.c:83) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] high priority precedence (dispatch_priority.c:83) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] high priority precedence (dispatch_priority.c:83) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] high priority precedence (dispatch_priority.c:83) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] high priority precedence (dispatch_priority.c:83) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) [FAIL] average jitter (dispatch_drift.c:87) —————————
participants (1)
-
Joakim Johansson