| Index: third_party/protobuf/objectivec/GPBMessage_PackagePrivate.h
|
| diff --git a/third_party/protobuf/objectivec/GPBMessage_PackagePrivate.h b/third_party/protobuf/objectivec/GPBMessage_PackagePrivate.h
|
| index b7e24fc9330536cfa8043a58763209a8dad7dffc..478db2cf0f96395915637ab862a0ec2f29a2bc1c 100644
|
| --- a/third_party/protobuf/objectivec/GPBMessage_PackagePrivate.h
|
| +++ b/third_party/protobuf/objectivec/GPBMessage_PackagePrivate.h
|
| @@ -67,6 +67,10 @@ typedef struct GPBMessage_Storage *GPBMessage_StoragePtr;
|
| // priority inversion:
|
| // http://mjtsai.com/blog/2015/12/16/osspinlock-is-unsafe/
|
| // https://lists.swift.org/pipermail/swift-dev/Week-of-Mon-20151214/000372.html
|
| + // Use of readOnlySemaphore_ must be prefaced by a call to
|
| + // GPBPrepareReadOnlySemaphore to ensure it has been created. This allows
|
| + // readOnlySemaphore_ to be only created when actually needed.
|
| + dispatch_once_t readOnlySemaphoreCreationOnce_;
|
| dispatch_semaphore_t readOnlySemaphore_;
|
| }
|
|
|
| @@ -103,6 +107,14 @@ typedef struct GPBMessage_Storage *GPBMessage_StoragePtr;
|
|
|
| CF_EXTERN_C_BEGIN
|
|
|
| +
|
| +// Call this before using the readOnlySemaphore_. This ensures it is created only once.
|
| +NS_INLINE void GPBPrepareReadOnlySemaphore(GPBMessage *self) {
|
| + dispatch_once(&self->readOnlySemaphoreCreationOnce_, ^{
|
| + self->readOnlySemaphore_ = dispatch_semaphore_create(1);
|
| + });
|
| +}
|
| +
|
| // Returns a new instance that was automatically created by |autocreator| for
|
| // its field |field|.
|
| GPBMessage *GPBCreateMessageWithAutocreator(Class msgClass,
|
|
|