@@ -654,7 +654,11 @@ typedef struct __CFRunLoopMode *CFRunLoopModeRef;
654
654
655
655
struct __CFRunLoopMode {
656
656
CFRuntimeBase _base ;
657
+ #if DEPLOYMENT_TARGET_WINDOWS
658
+ CRITICAL_SECTION _lock ;
659
+ #else
657
660
CFLock_t _lock ; /* must have the run loop locked before locking this */
661
+ #endif
658
662
CFStringRef _name ;
659
663
Boolean _stopped ;
660
664
char _padding [3 ];
@@ -684,13 +688,21 @@ struct __CFRunLoopMode {
684
688
};
685
689
686
690
CF_INLINE void __CFRunLoopModeLock (CFRunLoopModeRef rlm ) {
691
+ #if DEPLOYMENT_TARGET_WINDOWS
692
+ EnterCriticalSection (& (rlm -> _lock ));
693
+ #else
687
694
__CFLock (& (rlm -> _lock ));
695
+ #endif
688
696
//CFLog(6, CFSTR("__CFRunLoopModeLock locked %p"), rlm);
689
697
}
690
698
691
699
CF_INLINE void __CFRunLoopModeUnlock (CFRunLoopModeRef rlm ) {
692
700
//CFLog(6, CFSTR("__CFRunLoopModeLock unlocking %p"), rlm);
701
+ #if DEPLOYMENT_TARGET_WINDOWS
702
+ LeaveCriticalSection (& (rlm -> _lock ));
703
+ #else
693
704
__CFUnlock (& (rlm -> _lock ));
705
+ #endif
694
706
}
695
707
696
708
static Boolean __CFRunLoopModeEqual (CFTypeRef cf1 , CFTypeRef cf2 ) {
@@ -724,6 +736,16 @@ static CFStringRef __CFRunLoopModeCopyDescription(CFTypeRef cf) {
724
736
return result ;
725
737
}
726
738
739
+ #if DEPLOYMENT_TARGET_WINDOWS
740
+ CF_INLINE void __CFRunLoopLockDestroy (LPCRITICAL_SECTION lpCS ) {
741
+ DeleteCritialSection (lpCS );
742
+ }
743
+ #else
744
+ CF_INLINE void __CFRunLoopLockDestroy (CFLock_t * lock ) {
745
+ pthread_mutex_destroy (lock );
746
+ }
747
+ #endif
748
+
727
749
static void __CFRunLoopModeDeallocate (CFTypeRef cf ) {
728
750
CFRunLoopModeRef rlm = (CFRunLoopModeRef )cf ;
729
751
if (NULL != rlm -> _sources0 ) CFRelease (rlm -> _sources0 );
@@ -745,7 +767,7 @@ static void __CFRunLoopModeDeallocate(CFTypeRef cf) {
745
767
#if USE_MK_TIMER_TOO
746
768
if (MACH_PORT_NULL != rlm -> _timerPort ) mk_timer_destroy (rlm -> _timerPort );
747
769
#endif
748
- pthread_mutex_destroy (& rlm -> _lock );
770
+ __CFRunLoopLockDestroy (& rlm -> _lock );
749
771
memset ((char * )cf + sizeof (CFRuntimeBase ), 0x7C , sizeof (struct __CFRunLoopMode ) - sizeof (CFRuntimeBase ));
750
772
}
751
773
@@ -767,7 +789,11 @@ typedef struct _per_run_data {
767
789
768
790
struct __CFRunLoop {
769
791
CFRuntimeBase _base ;
792
+ #if DEPLOYMENT_TARGET_WINDOWS
793
+ CRITICAL_SECTION _lock ;
794
+ #else
770
795
CFLock_t _lock ; /* locked for accessing mode list */
796
+ #endif
771
797
__CFPort _wakeUpPort ; // used for CFRunLoopWakeUp
772
798
Boolean _unused ;
773
799
volatile _per_run_data * _perRunData ; // reset for runs of the run loop
@@ -850,13 +876,21 @@ CF_INLINE void __CFRunLoopSetDeallocating(CFRunLoopRef rl) {
850
876
}
851
877
852
878
CF_INLINE void __CFRunLoopLock (CFRunLoopRef rl ) {
879
+ #if DEPLOYMENT_TARGET_WINDOWS
880
+ EnterCriticalSection (& (rl -> _lock ));
881
+ #else
853
882
__CFLock (& (((CFRunLoopRef )rl )-> _lock ));
883
+ #endif
854
884
// CFLog(6, CFSTR("__CFRunLoopLock locked %p"), rl);
855
885
}
856
886
857
887
CF_INLINE void __CFRunLoopUnlock (CFRunLoopRef rl ) {
858
888
// CFLog(6, CFSTR("__CFRunLoopLock unlocking %p"), rl);
889
+ #if DEPLOYMENT_TARGET_WINDOWS
890
+ LeaveCriticalSection (& (rl -> _lock ));
891
+ #else
859
892
__CFUnlock (& (((CFRunLoopRef )rl )-> _lock ));
893
+ #endif
860
894
}
861
895
862
896
static CFStringRef __CFRunLoopCopyDescription (CFTypeRef cf ) {
@@ -878,6 +912,11 @@ CF_PRIVATE void __CFRunLoopDump() { // __private_extern__ to keep the compiler f
878
912
CFRelease (desc );
879
913
}
880
914
915
+ #if DEPLOYMENT_TARGET_WINDOWS
916
+ CF_INLINE void __CFRunLoopLockInit (LPCRITICAL_SECTION lpCS ) {
917
+ InitializeCriticalSection (lpCS );
918
+ }
919
+ #else
881
920
CF_INLINE void __CFRunLoopLockInit (CFLock_t * lock ) {
882
921
pthread_mutexattr_t mattr ;
883
922
pthread_mutexattr_init (& mattr );
@@ -887,6 +926,7 @@ CF_INLINE void __CFRunLoopLockInit(CFLock_t *lock) {
887
926
if (0 != mret ) {
888
927
}
889
928
}
929
+ #endif
890
930
891
931
/* call with rl locked, returns mode locked */
892
932
static CFRunLoopModeRef __CFRunLoopFindMode (CFRunLoopRef rl , CFStringRef modeName , Boolean create ) {
@@ -1085,7 +1125,11 @@ CF_INLINE void __CFUnsetValid(void *cf) {
1085
1125
1086
1126
struct __CFRunLoopSource {
1087
1127
CFRuntimeBase _base ;
1128
+ #if DEPLOYMENT_TARGET_WINDOWS
1129
+ CRITICAL_SECTION _lock ;
1130
+ #else
1088
1131
CFLock_t _lock ;
1132
+ #endif
1089
1133
CFIndex _order ; /* immutable */
1090
1134
CFMutableBagRef _runLoops ;
1091
1135
union {
@@ -1108,20 +1152,32 @@ CF_INLINE void __CFRunLoopSourceUnsetSignaled(CFRunLoopSourceRef rls) {
1108
1152
}
1109
1153
1110
1154
CF_INLINE void __CFRunLoopSourceLock (CFRunLoopSourceRef rls ) {
1155
+ #if DEPLOYMENT_TARGET_WINDOWS
1156
+ EnterCriticalSection (& (rls -> _lock ));
1157
+ #else
1111
1158
__CFLock (& (rls -> _lock ));
1159
+ #endif
1112
1160
// CFLog(6, CFSTR("__CFRunLoopSourceLock locked %p"), rls);
1113
1161
}
1114
1162
1115
1163
CF_INLINE void __CFRunLoopSourceUnlock (CFRunLoopSourceRef rls ) {
1116
1164
// CFLog(6, CFSTR("__CFRunLoopSourceLock unlocking %p"), rls);
1165
+ #if DEPLOYMENT_TARGET_WINDOWS
1166
+ LeaveCriticalSection (& (rls -> _lock ));
1167
+ #else
1117
1168
__CFUnlock (& (rls -> _lock ));
1169
+ #endif
1118
1170
}
1119
1171
1120
1172
#pragma mark Observers
1121
1173
1122
1174
struct __CFRunLoopObserver {
1123
1175
CFRuntimeBase _base ;
1176
+ #if DEPLOYMENT_TARGET_WINDOWS
1177
+ CRITICAL_SECTION _lock ;
1178
+ #else
1124
1179
CFLock_t _lock ;
1180
+ #endif
1125
1181
CFRunLoopRef _runLoop ;
1126
1182
CFIndex _rlCount ;
1127
1183
CFOptionFlags _activities ; /* immutable */
@@ -1158,13 +1214,21 @@ CF_INLINE void __CFRunLoopObserverUnsetRepeats(CFRunLoopObserverRef rlo) {
1158
1214
}
1159
1215
1160
1216
CF_INLINE void __CFRunLoopObserverLock (CFRunLoopObserverRef rlo ) {
1217
+ #if DEPLOYMENT_TARGET_WINDOWS
1218
+ EnterCriticalSection (& (rlo -> _lock ));
1219
+ #else
1161
1220
__CFLock (& (rlo -> _lock ));
1221
+ #endif
1162
1222
// CFLog(6, CFSTR("__CFRunLoopObserverLock locked %p"), rlo);
1163
1223
}
1164
1224
1165
1225
CF_INLINE void __CFRunLoopObserverUnlock (CFRunLoopObserverRef rlo ) {
1166
1226
// CFLog(6, CFSTR("__CFRunLoopObserverLock unlocking %p"), rlo);
1227
+ #if DEPLOYMENT_TARGET_WINDOWS
1228
+ LeaveCriticalSection (& (rlo -> _lock ));
1229
+ #else
1167
1230
__CFUnlock (& (rlo -> _lock ));
1231
+ #endif
1168
1232
}
1169
1233
1170
1234
static void __CFRunLoopObserverSchedule (CFRunLoopObserverRef rlo , CFRunLoopRef rl , CFRunLoopModeRef rlm ) {
@@ -1190,7 +1254,11 @@ static void __CFRunLoopObserverCancel(CFRunLoopObserverRef rlo, CFRunLoopRef rl,
1190
1254
struct __CFRunLoopTimer {
1191
1255
CFRuntimeBase _base ;
1192
1256
uint16_t _bits ;
1257
+ #if DEPLOYMENT_TARGET_WINDOWS
1258
+ CRITICAL_SECTION _lock ;
1259
+ #else
1193
1260
CFLock_t _lock ;
1261
+ #endif
1194
1262
CFRunLoopRef _runLoop ;
1195
1263
CFMutableSetRef _rlModes ;
1196
1264
CFAbsoluteTime _nextFireDate ;
@@ -1227,13 +1295,21 @@ CF_INLINE void __CFRunLoopTimerSetDeallocating(CFRunLoopTimerRef rlt) {
1227
1295
}
1228
1296
1229
1297
CF_INLINE void __CFRunLoopTimerLock (CFRunLoopTimerRef rlt ) {
1298
+ #if DEPLOYMENT_TARGET_WINDOWS
1299
+ EnterCriticalSection (& (rlt -> _lock ));
1300
+ #else
1230
1301
__CFLock (& (rlt -> _lock ));
1302
+ #endif
1231
1303
// CFLog(6, CFSTR("__CFRunLoopTimerLock locked %p"), rlt);
1232
1304
}
1233
1305
1234
1306
CF_INLINE void __CFRunLoopTimerUnlock (CFRunLoopTimerRef rlt ) {
1235
1307
// CFLog(6, CFSTR("__CFRunLoopTimerLock unlocking %p"), rlt);
1308
+ #if DEPLOYMENT_TARGET_WINDOWS
1309
+ LeaveCriticalSection (& (rlt -> _lock ));
1310
+ #else
1236
1311
__CFUnlock (& (rlt -> _lock ));
1312
+ #endif
1237
1313
}
1238
1314
1239
1315
@@ -1411,7 +1487,7 @@ static void __CFRunLoopDeallocate(CFTypeRef cf) {
1411
1487
rl -> _wakeUpPort = CFPORT_NULL ;
1412
1488
__CFRunLoopPopPerRunData (rl , NULL );
1413
1489
__CFRunLoopUnlock (rl );
1414
- pthread_mutex_destroy (& rl -> _lock );
1490
+ __CFRunLoopLockDestroy (& rl -> _lock );
1415
1491
memset ((char * )cf + sizeof (CFRuntimeBase ), 0x8C , sizeof (struct __CFRunLoop ) - sizeof (CFRuntimeBase ));
1416
1492
}
1417
1493
@@ -1554,7 +1630,11 @@ CF_EXPORT CFRunLoopRef _CFRunLoopGet0(_CFThreadRef t) {
1554
1630
if (pthread_equal (t , pthread_self ())) {
1555
1631
_CFSetTSD (__CFTSDKeyRunLoop , (void * )loop , NULL );
1556
1632
if (0 == _CFGetTSD (__CFTSDKeyRunLoopCntr )) {
1633
+ #if _POSIX_THREADS
1557
1634
_CFSetTSD (__CFTSDKeyRunLoopCntr , (void * )(PTHREAD_DESTRUCTOR_ITERATIONS - 1 ), (void (* )(void * ))__CFFinalizeRunLoop );
1635
+ #elif DEPLOYMENT_TARGET_WINDOWS
1636
+ _CFSetTSD (__CFTSDKeyRunLoopCntr , (void * )0 , (void (* )(void * ))__CFFinalizeRunLoop );
1637
+ #endif
1558
1638
}
1559
1639
}
1560
1640
return loop ;
@@ -3732,7 +3812,7 @@ static void __CFRunLoopSourceDeallocate(CFTypeRef cf) { /* DOES CALLOUT */
3732
3812
if (rls -> _context .version0 .release ) {
3733
3813
rls -> _context .version0 .release (rls -> _context .version0 .info );
3734
3814
}
3735
- pthread_mutex_destroy (& rls -> _lock );
3815
+ __CFRunLoopLockDestroy (& rls -> _lock );
3736
3816
memset ((char * )cf + sizeof (CFRuntimeBase ), 0 , sizeof (struct __CFRunLoopSource ) - sizeof (CFRuntimeBase ));
3737
3817
}
3738
3818
@@ -3923,7 +4003,7 @@ static CFStringRef __CFRunLoopObserverCopyDescription(CFTypeRef cf) { /* DOES CA
3923
4003
static void __CFRunLoopObserverDeallocate (CFTypeRef cf ) { /* DOES CALLOUT */
3924
4004
CFRunLoopObserverRef rlo = (CFRunLoopObserverRef )cf ;
3925
4005
CFRunLoopObserverInvalidate (rlo );
3926
- pthread_mutex_destroy (& rlo -> _lock );
4006
+ __CFRunLoopLockDestroy (& rlo -> _lock );
3927
4007
}
3928
4008
3929
4009
const CFRuntimeClass __CFRunLoopObserverClass = {
@@ -4114,7 +4194,7 @@ static void __CFRunLoopTimerDeallocate(CFTypeRef cf) { /* DOES CALLOUT */
4114
4194
CFRunLoopTimerInvalidate (rlt ); /* DOES CALLOUT */
4115
4195
CFRelease (rlt -> _rlModes );
4116
4196
rlt -> _rlModes = NULL ;
4117
- pthread_mutex_destroy (& rlt -> _lock );
4197
+ __CFRunLoopLockDestroy (& rlt -> _lock );
4118
4198
}
4119
4199
4120
4200
const CFRuntimeClass __CFRunLoopTimerClass = {
0 commit comments