@@ -668,7 +668,11 @@ typedef struct __CFRunLoopMode *CFRunLoopModeRef;
668
668
669
669
struct __CFRunLoopMode {
670
670
CFRuntimeBase _base ;
671
+ #if DEPLOYMENT_TARGET_WINDOWS
672
+ CRITICAL_SECTION _lock ;
673
+ #else
671
674
CFLock_t _lock ; /* must have the run loop locked before locking this */
675
+ #endif
672
676
CFStringRef _name ;
673
677
Boolean _stopped ;
674
678
char _padding [3 ];
@@ -698,13 +702,21 @@ struct __CFRunLoopMode {
698
702
};
699
703
700
704
CF_INLINE void __CFRunLoopModeLock (CFRunLoopModeRef rlm ) {
705
+ #if DEPLOYMENT_TARGET_WINDOWS
706
+ EnterCriticalSection (& (rlm -> _lock ));
707
+ #else
701
708
__CFLock (& (rlm -> _lock ));
709
+ #endif
702
710
//CFLog(6, CFSTR("__CFRunLoopModeLock locked %p"), rlm);
703
711
}
704
712
705
713
CF_INLINE void __CFRunLoopModeUnlock (CFRunLoopModeRef rlm ) {
706
714
//CFLog(6, CFSTR("__CFRunLoopModeLock unlocking %p"), rlm);
715
+ #if DEPLOYMENT_TARGET_WINDOWS
716
+ LeaveCriticalSection (& (rlm -> _lock ));
717
+ #else
707
718
__CFUnlock (& (rlm -> _lock ));
719
+ #endif
708
720
}
709
721
710
722
static Boolean __CFRunLoopModeEqual (CFTypeRef cf1 , CFTypeRef cf2 ) {
@@ -738,6 +750,16 @@ static CFStringRef __CFRunLoopModeCopyDescription(CFTypeRef cf) {
738
750
return result ;
739
751
}
740
752
753
+ #if DEPLOYMENT_TARGET_WINDOWS
754
+ CF_INLINE void __CFRunLoopLockDestroy (LPCRITICAL_SECTION lpCS ) {
755
+ DeleteCritialSection (lpCS );
756
+ }
757
+ #else
758
+ CF_INLINE void __CFRunLoopLockDestroy (CFLock_t * lock ) {
759
+ pthread_mutex_destroy (lock );
760
+ }
761
+ #endif
762
+
741
763
static void __CFRunLoopModeDeallocate (CFTypeRef cf ) {
742
764
CFRunLoopModeRef rlm = (CFRunLoopModeRef )cf ;
743
765
if (NULL != rlm -> _sources0 ) CFRelease (rlm -> _sources0 );
@@ -759,7 +781,7 @@ static void __CFRunLoopModeDeallocate(CFTypeRef cf) {
759
781
#if USE_MK_TIMER_TOO
760
782
if (MACH_PORT_NULL != rlm -> _timerPort ) mk_timer_destroy (rlm -> _timerPort );
761
783
#endif
762
- pthread_mutex_destroy (& rlm -> _lock );
784
+ __CFRunLoopLockDestroy (& rlm -> _lock );
763
785
memset ((char * )cf + sizeof (CFRuntimeBase ), 0x7C , sizeof (struct __CFRunLoopMode ) - sizeof (CFRuntimeBase ));
764
786
}
765
787
@@ -781,7 +803,11 @@ typedef struct _per_run_data {
781
803
782
804
struct __CFRunLoop {
783
805
CFRuntimeBase _base ;
806
+ #if DEPLOYMENT_TARGET_WINDOWS
807
+ CRITICAL_SECTION _lock ;
808
+ #else
784
809
CFLock_t _lock ; /* locked for accessing mode list */
810
+ #endif
785
811
__CFPort _wakeUpPort ; // used for CFRunLoopWakeUp
786
812
Boolean _unused ;
787
813
volatile _per_run_data * _perRunData ; // reset for runs of the run loop
@@ -864,13 +890,21 @@ CF_INLINE void __CFRunLoopSetDeallocating(CFRunLoopRef rl) {
864
890
}
865
891
866
892
CF_INLINE void __CFRunLoopLock (CFRunLoopRef rl ) {
893
+ #if DEPLOYMENT_TARGET_WINDOWS
894
+ EnterCriticalSection (& (rl -> _lock ));
895
+ #else
867
896
__CFLock (& (((CFRunLoopRef )rl )-> _lock ));
897
+ #endif
868
898
// CFLog(6, CFSTR("__CFRunLoopLock locked %p"), rl);
869
899
}
870
900
871
901
CF_INLINE void __CFRunLoopUnlock (CFRunLoopRef rl ) {
872
902
// CFLog(6, CFSTR("__CFRunLoopLock unlocking %p"), rl);
903
+ #if DEPLOYMENT_TARGET_WINDOWS
904
+ LeaveCriticalSection (& (rl -> _lock ));
905
+ #else
873
906
__CFUnlock (& (((CFRunLoopRef )rl )-> _lock ));
907
+ #endif
874
908
}
875
909
876
910
static CFStringRef __CFRunLoopCopyDescription (CFTypeRef cf ) {
@@ -892,6 +926,11 @@ CF_PRIVATE void __CFRunLoopDump() { // __private_extern__ to keep the compiler f
892
926
CFRelease (desc );
893
927
}
894
928
929
+ #if DEPLOYMENT_TARGET_WINDOWS
930
+ CF_INLINE void __CFRunLoopLockInit (LPCRITICAL_SECTION lpCS ) {
931
+ InitializeCriticalSection (lpCS );
932
+ }
933
+ #else
895
934
CF_INLINE void __CFRunLoopLockInit (CFLock_t * lock ) {
896
935
pthread_mutexattr_t mattr ;
897
936
pthread_mutexattr_init (& mattr );
@@ -901,6 +940,7 @@ CF_INLINE void __CFRunLoopLockInit(CFLock_t *lock) {
901
940
if (0 != mret ) {
902
941
}
903
942
}
943
+ #endif
904
944
905
945
/* call with rl locked, returns mode locked */
906
946
static CFRunLoopModeRef __CFRunLoopFindMode (CFRunLoopRef rl , CFStringRef modeName , Boolean create ) {
@@ -1099,7 +1139,11 @@ CF_INLINE void __CFUnsetValid(void *cf) {
1099
1139
1100
1140
struct __CFRunLoopSource {
1101
1141
CFRuntimeBase _base ;
1142
+ #if DEPLOYMENT_TARGET_WINDOWS
1143
+ CRITICAL_SECTION _lock ;
1144
+ #else
1102
1145
CFLock_t _lock ;
1146
+ #endif
1103
1147
CFIndex _order ; /* immutable */
1104
1148
CFMutableBagRef _runLoops ;
1105
1149
union {
@@ -1122,20 +1166,32 @@ CF_INLINE void __CFRunLoopSourceUnsetSignaled(CFRunLoopSourceRef rls) {
1122
1166
}
1123
1167
1124
1168
CF_INLINE void __CFRunLoopSourceLock (CFRunLoopSourceRef rls ) {
1169
+ #if DEPLOYMENT_TARGET_WINDOWS
1170
+ EnterCriticalSection (& (rls -> _lock ));
1171
+ #else
1125
1172
__CFLock (& (rls -> _lock ));
1173
+ #endif
1126
1174
// CFLog(6, CFSTR("__CFRunLoopSourceLock locked %p"), rls);
1127
1175
}
1128
1176
1129
1177
CF_INLINE void __CFRunLoopSourceUnlock (CFRunLoopSourceRef rls ) {
1130
1178
// CFLog(6, CFSTR("__CFRunLoopSourceLock unlocking %p"), rls);
1179
+ #if DEPLOYMENT_TARGET_WINDOWS
1180
+ LeaveCriticalSection (& (rls -> _lock ));
1181
+ #else
1131
1182
__CFUnlock (& (rls -> _lock ));
1183
+ #endif
1132
1184
}
1133
1185
1134
1186
#pragma mark Observers
1135
1187
1136
1188
struct __CFRunLoopObserver {
1137
1189
CFRuntimeBase _base ;
1190
+ #if DEPLOYMENT_TARGET_WINDOWS
1191
+ CRITICAL_SECTION _lock ;
1192
+ #else
1138
1193
CFLock_t _lock ;
1194
+ #endif
1139
1195
CFRunLoopRef _runLoop ;
1140
1196
CFIndex _rlCount ;
1141
1197
CFOptionFlags _activities ; /* immutable */
@@ -1172,13 +1228,21 @@ CF_INLINE void __CFRunLoopObserverUnsetRepeats(CFRunLoopObserverRef rlo) {
1172
1228
}
1173
1229
1174
1230
CF_INLINE void __CFRunLoopObserverLock (CFRunLoopObserverRef rlo ) {
1231
+ #if DEPLOYMENT_TARGET_WINDOWS
1232
+ EnterCriticalSection (& (rlo -> _lock ));
1233
+ #else
1175
1234
__CFLock (& (rlo -> _lock ));
1235
+ #endif
1176
1236
// CFLog(6, CFSTR("__CFRunLoopObserverLock locked %p"), rlo);
1177
1237
}
1178
1238
1179
1239
CF_INLINE void __CFRunLoopObserverUnlock (CFRunLoopObserverRef rlo ) {
1180
1240
// CFLog(6, CFSTR("__CFRunLoopObserverLock unlocking %p"), rlo);
1241
+ #if DEPLOYMENT_TARGET_WINDOWS
1242
+ LeaveCriticalSection (& (rlo -> _lock ));
1243
+ #else
1181
1244
__CFUnlock (& (rlo -> _lock ));
1245
+ #endif
1182
1246
}
1183
1247
1184
1248
static void __CFRunLoopObserverSchedule (CFRunLoopObserverRef rlo , CFRunLoopRef rl , CFRunLoopModeRef rlm ) {
@@ -1204,7 +1268,11 @@ static void __CFRunLoopObserverCancel(CFRunLoopObserverRef rlo, CFRunLoopRef rl,
1204
1268
struct __CFRunLoopTimer {
1205
1269
CFRuntimeBase _base ;
1206
1270
uint16_t _bits ;
1271
+ #if DEPLOYMENT_TARGET_WINDOWS
1272
+ CRITICAL_SECTION _lock ;
1273
+ #else
1207
1274
CFLock_t _lock ;
1275
+ #endif
1208
1276
CFRunLoopRef _runLoop ;
1209
1277
CFMutableSetRef _rlModes ;
1210
1278
CFAbsoluteTime _nextFireDate ;
@@ -1241,13 +1309,21 @@ CF_INLINE void __CFRunLoopTimerSetDeallocating(CFRunLoopTimerRef rlt) {
1241
1309
}
1242
1310
1243
1311
CF_INLINE void __CFRunLoopTimerLock (CFRunLoopTimerRef rlt ) {
1312
+ #if DEPLOYMENT_TARGET_WINDOWS
1313
+ EnterCriticalSection (& (rlt -> _lock ));
1314
+ #else
1244
1315
__CFLock (& (rlt -> _lock ));
1316
+ #endif
1245
1317
// CFLog(6, CFSTR("__CFRunLoopTimerLock locked %p"), rlt);
1246
1318
}
1247
1319
1248
1320
CF_INLINE void __CFRunLoopTimerUnlock (CFRunLoopTimerRef rlt ) {
1249
1321
// CFLog(6, CFSTR("__CFRunLoopTimerLock unlocking %p"), rlt);
1322
+ #if DEPLOYMENT_TARGET_WINDOWS
1323
+ LeaveCriticalSection (& (rlt -> _lock ));
1324
+ #else
1250
1325
__CFUnlock (& (rlt -> _lock ));
1326
+ #endif
1251
1327
}
1252
1328
1253
1329
@@ -1425,7 +1501,7 @@ static void __CFRunLoopDeallocate(CFTypeRef cf) {
1425
1501
rl -> _wakeUpPort = CFPORT_NULL ;
1426
1502
__CFRunLoopPopPerRunData (rl , NULL );
1427
1503
__CFRunLoopUnlock (rl );
1428
- pthread_mutex_destroy (& rl -> _lock );
1504
+ __CFRunLoopLockDestroy (& rl -> _lock );
1429
1505
memset ((char * )cf + sizeof (CFRuntimeBase ), 0x8C , sizeof (struct __CFRunLoop ) - sizeof (CFRuntimeBase ));
1430
1506
}
1431
1507
@@ -1568,7 +1644,11 @@ CF_EXPORT CFRunLoopRef _CFRunLoopGet0(_CFThreadRef t) {
1568
1644
if (pthread_equal (t , pthread_self ())) {
1569
1645
_CFSetTSD (__CFTSDKeyRunLoop , (void * )loop , NULL );
1570
1646
if (0 == _CFGetTSD (__CFTSDKeyRunLoopCntr )) {
1647
+ #if _POSIX_THREADS
1571
1648
_CFSetTSD (__CFTSDKeyRunLoopCntr , (void * )(PTHREAD_DESTRUCTOR_ITERATIONS - 1 ), (void (* )(void * ))__CFFinalizeRunLoop );
1649
+ #elif DEPLOYMENT_TARGET_WINDOWS
1650
+ _CFSetTSD (__CFTSDKeyRunLoopCntr , (void * )0 , (void (* )(void * ))__CFFinalizeRunLoop );
1651
+ #endif
1572
1652
}
1573
1653
}
1574
1654
return loop ;
@@ -3746,7 +3826,7 @@ static void __CFRunLoopSourceDeallocate(CFTypeRef cf) { /* DOES CALLOUT */
3746
3826
if (rls -> _context .version0 .release ) {
3747
3827
rls -> _context .version0 .release (rls -> _context .version0 .info );
3748
3828
}
3749
- pthread_mutex_destroy (& rls -> _lock );
3829
+ __CFRunLoopLockDestroy (& rls -> _lock );
3750
3830
memset ((char * )cf + sizeof (CFRuntimeBase ), 0 , sizeof (struct __CFRunLoopSource ) - sizeof (CFRuntimeBase ));
3751
3831
}
3752
3832
@@ -3937,7 +4017,7 @@ static CFStringRef __CFRunLoopObserverCopyDescription(CFTypeRef cf) { /* DOES CA
3937
4017
static void __CFRunLoopObserverDeallocate (CFTypeRef cf ) { /* DOES CALLOUT */
3938
4018
CFRunLoopObserverRef rlo = (CFRunLoopObserverRef )cf ;
3939
4019
CFRunLoopObserverInvalidate (rlo );
3940
- pthread_mutex_destroy (& rlo -> _lock );
4020
+ __CFRunLoopLockDestroy (& rlo -> _lock );
3941
4021
}
3942
4022
3943
4023
const CFRuntimeClass __CFRunLoopObserverClass = {
@@ -4128,7 +4208,7 @@ static void __CFRunLoopTimerDeallocate(CFTypeRef cf) { /* DOES CALLOUT */
4128
4208
CFRunLoopTimerInvalidate (rlt ); /* DOES CALLOUT */
4129
4209
CFRelease (rlt -> _rlModes );
4130
4210
rlt -> _rlModes = NULL ;
4131
- pthread_mutex_destroy (& rlt -> _lock );
4211
+ __CFRunLoopLockDestroy (& rlt -> _lock );
4132
4212
}
4133
4213
4134
4214
const CFRuntimeClass __CFRunLoopTimerClass = {
0 commit comments