1515#import  < CoreVideo/CVDisplayLink.h> 
1616#import  < CoreVideo/CVHostTime.h> 
1717
18- #import  < libkern/OSAtomic .h> 
18+ #import  < os/lock .h> 
1919
2020@interface  RCTPlatformDisplayLink  ()
2121
@@ -30,7 +30,7 @@ @implementation RCTPlatformDisplayLink
3030  __weak id  _target;
3131  NSRunLoop  *_runLoop;
3232  NSMutableArray <NSRunLoopMode > *_modes;
33-   OSSpinLock  _lock; //  OS_SPINLOCK_INIT  == 0
33+   os_unfair_lock  _lock; //  OS_UNFAIR_LOCK_INIT  == 0
3434}
3535
3636+ (RCTPlatformDisplayLink *)displayLinkWithTarget : (id )target  selector : (SEL )sel 
@@ -47,15 +47,15 @@ static CVReturn RCTPlatformDisplayLinkCallBack(__unused CVDisplayLinkRef display
4747    RCTPlatformDisplayLink *rctDisplayLink = (__bridge RCTPlatformDisplayLink*)displayLinkContext;
4848
4949    //  Lock and check for invalidation prior to calling out to the runloop
50-     OSSpinLockLock (&rctDisplayLink->_lock );
50+     os_unfair_lock_lock (&rctDisplayLink->_lock );
5151    if  (rctDisplayLink->_runLoop  != nil ) {
5252      CFRunLoopRef cfRunLoop = [rctDisplayLink->_runLoop getCFRunLoop ];
5353      CFRunLoopPerformBlock (cfRunLoop, kCFRunLoopDefaultMode , ^{
5454        [rctDisplayLink tick ];
5555      });
5656      CFRunLoopWakeUp (cfRunLoop);
5757    }
58-     OSSpinLockUnlock (&rctDisplayLink->_lock );
58+     os_unfair_lock_unlock (&rctDisplayLink->_lock );
5959  }
6060  return  kCVReturnSuccess ;
6161}
@@ -98,10 +98,10 @@ - (void)removeFromRunLoop:(__unused NSRunLoop *)runloop forMode:(NSRunLoopMode)m
9898- (void )invalidate 
9999{
100100  if  (_runLoop != nil ) {
101-     OSSpinLockLock (&_lock);
101+     os_unfair_lock_lock (&_lock);
102102    _runLoop = nil ;
103103    _modes = nil ;
104-     OSSpinLockUnlock (&_lock);
104+     os_unfair_lock_unlock (&_lock);
105105
106106    //  CVDisplayLinkStop attempts to acquire a mutex possibly held during the callback's invocation.
107107    //  Stop the display link outside of the lock to avoid deadlocking here.
0 commit comments