|
@@ -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) {
|
|
|
|
-#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
|
|
|
|
-}
|
|
|
|
|
|
+void GPBPrepareReadOnlySemaphore(GPBMessage *self);
|
|
|
|
|
|
// 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|.
|