@ -70,7 +70,6 @@ typedef struct GPBMessage_Storage *GPBMessage_StoragePtr;
// Use of readOnlySemaphore_ must be prefaced by a call to
// Use of readOnlySemaphore_ must be prefaced by a call to
// GPBPrepareReadOnlySemaphore to ensure it has been created. This allows
// GPBPrepareReadOnlySemaphore to ensure it has been created. This allows
// readOnlySemaphore_ to be only created when actually needed.
// readOnlySemaphore_ to be only created when actually needed.
dispatch_once_t readOnlySemaphoreCreationOnce_ ;
dispatch_semaphore_t readOnlySemaphore_ ;
dispatch_semaphore_t readOnlySemaphore_ ;
}
}
@ -105,22 +104,7 @@ CF_EXTERN_C_BEGIN
// Call this before using the readOnlySemaphore_. This ensures it is created only once.
// Call this before using the readOnlySemaphore_. This ensures it is created only once.
NS_INLINE void GPBPrepareReadOnlySemaphore ( GPBMessage * self ) {
void GPBPrepareReadOnlySemaphore ( GPBMessage * self ) ;
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdirect-ivar-access"
// Starting on Xcode 8.3, the static analyzer complains that the dispatch_once_t
// variable passed to dispatch_once should not be allocated on the heap or
// stack. Given that the semaphore is also an instance variable of the message,
// both variables are cleared at the same time, so this is safe.
# if !defined(__clang_analyzer__)
dispatch_once ( & self - > readOnlySemaphoreCreationOnce_ , ^ {
self - > readOnlySemaphore_ = dispatch_semaphore_create ( 1 ) ;
} ) ;
# endif // !defined(__clang_analyzer__)
# pragma clang diagnostic pop
}
// Returns a new instance that was automatically created by |autocreator| for
// Returns a new instance that was automatically created by |autocreator| for
// its field |field|.
// its field |field|.