aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralien <the-alien@live.ru>2016-03-29 20:58:23 +0300
committeralien <the-alien@live.ru>2016-03-29 20:58:23 +0300
commitaf34538aca9d91b86826223624018a69370caa1d (patch)
treee946d75326662d0e2f72a4379de098fa61c25705
parent6f8dd2115b3ed07819a48dfa78b15770dfa2c450 (diff)
parent261ee021f640ea6fe67aaf1f53e1518ed154cad0 (diff)
downloadprotobuf-af34538aca9d91b86826223624018a69370caa1d.tar.gz
protobuf-af34538aca9d91b86826223624018a69370caa1d.tar.bz2
protobuf-af34538aca9d91b86826223624018a69370caa1d.zip
Merge branch 'master' of https://github.com/google/protobuf into csharp_json_name
-rw-r--r--.travis.yml9
-rw-r--r--BUILD6
-rw-r--r--java/util/src/main/java/com/google/protobuf/util/JsonFormat.java7
-rw-r--r--objectivec/GPBMessage.m11
-rw-r--r--objectivec/GPBMessage_PackagePrivate.h12
-rw-r--r--objectivec/GPBUtilities.m1
-rw-r--r--src/google/protobuf/io/coded_stream.h2
-rwxr-xr-xtravis.sh8
8 files changed, 39 insertions, 17 deletions
diff --git a/.travis.yml b/.travis.yml
index 9bc4d88f..60c0427d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -71,5 +71,14 @@ matrix:
# we moved to an OS X image that is 10.11.
- os: osx
env: CONFIG=python_cpp
+ # xctool 0.2.8 seems to have a bug where it randomly kills tests saying
+ # they failed.
+ # https://github.com/facebook/xctool/issues/619
+ # https://github.com/google/protobuf/issues/1232
+ # travis updated their images to include 0.2.8:
+ # https://blog.travis-ci.com/2016-03-23-xcode-image-updates
+ # Mark the iOS test as flakey so these failures don't turn things red.
+ - os: osx
+ env: CONFIG=objectivec_ios
notifications:
email: false
diff --git a/BUILD b/BUILD
index 2cb96b20..e35a2e8e 100644
--- a/BUILD
+++ b/BUILD
@@ -194,6 +194,12 @@ RELATIVE_WELL_KNOWN_PROTOS = [
WELL_KNOWN_PROTOS = ["src/" + s for s in RELATIVE_WELL_KNOWN_PROTOS]
+filegroup(
+ name = "well_known_protos",
+ srcs = WELL_KNOWN_PROTOS,
+ visibility = ["//visibility:public"],
+)
+
cc_proto_library(
name = "cc_wkt_protos",
srcs = WELL_KNOWN_PROTOS,
diff --git a/java/util/src/main/java/com/google/protobuf/util/JsonFormat.java b/java/util/src/main/java/com/google/protobuf/util/JsonFormat.java
index d13ff0ed..c9a28c9e 100644
--- a/java/util/src/main/java/com/google/protobuf/util/JsonFormat.java
+++ b/java/util/src/main/java/com/google/protobuf/util/JsonFormat.java
@@ -951,16 +951,15 @@ public class JsonFormat {
}
}
- private static final String TYPE_URL_PREFIX = "type.googleapis.com";
-
+
private static String getTypeName(String typeUrl)
throws InvalidProtocolBufferException {
String[] parts = typeUrl.split("/");
- if (parts.length != 2 || !parts[0].equals(TYPE_URL_PREFIX)) {
+ if (parts.length == 1) {
throw new InvalidProtocolBufferException(
"Invalid type url found: " + typeUrl);
}
- return parts[1];
+ return parts[parts.length - 1];
}
private static class ParserImpl {
diff --git a/objectivec/GPBMessage.m b/objectivec/GPBMessage.m
index 94d179be..0e1599dc 100644
--- a/objectivec/GPBMessage.m
+++ b/objectivec/GPBMessage.m
@@ -556,6 +556,7 @@ static id GetArrayIvarWithField(GPBMessage *self, GPBFieldDescriptor *field) {
id array = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
if (!array) {
// Check again after getting the lock.
+ GPBPrepareReadOnlySemaphore(self);
dispatch_semaphore_wait(self->readOnlySemaphore_, DISPATCH_TIME_FOREVER);
array = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
if (!array) {
@@ -586,6 +587,7 @@ static id GetMapIvarWithField(GPBMessage *self, GPBFieldDescriptor *field) {
id dict = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
if (!dict) {
// Check again after getting the lock.
+ GPBPrepareReadOnlySemaphore(self);
dispatch_semaphore_wait(self->readOnlySemaphore_, DISPATCH_TIME_FOREVER);
dict = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
if (!dict) {
@@ -791,8 +793,6 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
if ((self = [super init])) {
messageStorage_ = (GPBMessage_StoragePtr)(
((uint8_t *)self) + class_getInstanceSize([self class]));
-
- readOnlySemaphore_ = dispatch_semaphore_create(1);
}
return self;
@@ -868,7 +868,9 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
- (void)dealloc {
[self internalClear:NO];
NSCAssert(!autocreator_, @"Autocreator was not cleared before dealloc.");
- dispatch_release(readOnlySemaphore_);
+ if (readOnlySemaphore_) {
+ dispatch_release(readOnlySemaphore_);
+ }
[super dealloc];
}
@@ -1706,6 +1708,7 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
}
// Check for an autocreated value.
+ GPBPrepareReadOnlySemaphore(self);
dispatch_semaphore_wait(readOnlySemaphore_, DISPATCH_TIME_FOREVER);
value = [autocreatedExtensionMap_ objectForKey:extension];
if (!value) {
@@ -1917,7 +1920,6 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
}
}
@catch (NSException *exception) {
- [message release];
message = nil;
if (errorPtr) {
*errorPtr = MessageErrorWithReason(GPBMessageErrorCodeMalformedData,
@@ -1926,7 +1928,6 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
}
#ifdef DEBUG
if (message && !message.initialized) {
- [message release];
message = nil;
if (errorPtr) {
*errorPtr = MessageError(GPBMessageErrorCodeMissingRequiredField, nil);
diff --git a/objectivec/GPBMessage_PackagePrivate.h b/objectivec/GPBMessage_PackagePrivate.h
index b7e24fc9..478db2cf 100644
--- a/objectivec/GPBMessage_PackagePrivate.h
+++ b/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,
diff --git a/objectivec/GPBUtilities.m b/objectivec/GPBUtilities.m
index 3e9d11c0..447c749a 100644
--- a/objectivec/GPBUtilities.m
+++ b/objectivec/GPBUtilities.m
@@ -412,6 +412,7 @@ id GPBGetObjectIvarWithField(GPBMessage *self, GPBFieldDescriptor *field) {
return field.defaultValue.valueMessage;
}
+ GPBPrepareReadOnlySemaphore(self);
dispatch_semaphore_wait(self->readOnlySemaphore_, DISPATCH_TIME_FOREVER);
GPBMessage *result = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
if (!result) {
diff --git a/src/google/protobuf/io/coded_stream.h b/src/google/protobuf/io/coded_stream.h
index e3771003..c81a33ac 100644
--- a/src/google/protobuf/io/coded_stream.h
+++ b/src/google/protobuf/io/coded_stream.h
@@ -1136,7 +1136,7 @@ inline void CodedOutputStream::WriteVarint32(uint32 value) {
// this write won't cross the end, so we can skip the checks.
uint8* target = buffer_;
uint8* end = WriteVarint32ToArray(value, target);
- int size = end - target;
+ int size = static_cast<int>(end - target);
Advance(size);
} else {
WriteVarint32SlowPath(value);
diff --git a/travis.sh b/travis.sh
index ff5e99d5..f039b392 100755
--- a/travis.sh
+++ b/travis.sh
@@ -171,13 +171,7 @@ internal_objectivec_common () {
# http://docs.travis-ci.com/user/osx-ci-environment/
# We don't use a before_install because we test multiple OSes.
brew update
- # xctool 0.2.8 seems to have a bug where it randomly kills tests saying
- # they failed. Disabling the updates, but letting it report about being
- # updates as a hint that this needs to eventually get re-enabled.
- # https://github.com/facebook/xctool/issues/619
- # https://github.com/google/protobuf/issues/1232
- brew outdated xctool || true
- #brew outdated xctool || brew upgrade xctool
+ brew outdated xctool || brew upgrade xctool
# Reused the build script that takes care of configuring and ensuring things
# are up to date. Xcode and conformance tests will be directly invoked.
objectivec/DevTools/full_mac_build.sh \