google-protobuf 3.15.6-universal-darwin → 3.16.0-universal-darwin
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of google-protobuf might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/ext/google/protobuf_c/defs.c +35 -8
- data/ext/google/protobuf_c/message.c +3 -6
- data/ext/google/protobuf_c/protobuf.c +84 -8
- data/ext/google/protobuf_c/protobuf.h +2 -0
- data/lib/google/2.3/protobuf_c.bundle +0 -0
- data/lib/google/2.4/protobuf_c.bundle +0 -0
- data/lib/google/2.5/protobuf_c.bundle +0 -0
- data/lib/google/2.6/protobuf_c.bundle +0 -0
- data/lib/google/2.7/protobuf_c.bundle +0 -0
- data/lib/google/3.0/protobuf_c.bundle +0 -0
- metadata +4 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 52766610ef21901c0a97bc126ee685fc56181b6fb15a3e69e5556d0c146b4d58
         | 
| 4 | 
            +
              data.tar.gz: 654fb7c9d106544ec053c7c468a9f077fecc01da24256beaf85ec1ba9f5772a3
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 10d3e0739c1a6c789b65a311f216110c7560df623ef493e7ceb1b0005933802931d7399235cd5c00c00f653e9e6b64927848399557bd32c7f28d728b15b8194d
         | 
| 7 | 
            +
              data.tar.gz: 31bee69516e03661a4f99ff81b918b3bf5b89e43a702dda1bf1b14af14cfee3ec0417ffdd0201440813acbd3785b7ae62261bd07d63f3f205e2e80e294876a3f
         | 
| @@ -868,6 +868,20 @@ static VALUE FieldDescriptor_default(VALUE _self) { | |
| 868 868 | 
             
              return Convert_UpbToRuby(default_val, TypeInfo_get(self->fielddef), Qnil);
         | 
| 869 869 | 
             
            }
         | 
| 870 870 |  | 
| 871 | 
            +
             | 
| 872 | 
            +
            /*
         | 
| 873 | 
            +
             * call-seq:
         | 
| 874 | 
            +
             *     FieldDescriptor.json_name => json_name
         | 
| 875 | 
            +
             *
         | 
| 876 | 
            +
             * Returns this field's json_name, as a Ruby string, or nil if not yet set.
         | 
| 877 | 
            +
             */
         | 
| 878 | 
            +
            static VALUE FieldDescriptor_json_name(VALUE _self) {
         | 
| 879 | 
            +
              FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
         | 
| 880 | 
            +
              const upb_fielddef *f = self->fielddef;
         | 
| 881 | 
            +
              const char *json_name = upb_fielddef_jsonname(f);
         | 
| 882 | 
            +
              return rb_str_new2(json_name);
         | 
| 883 | 
            +
            }
         | 
| 884 | 
            +
             | 
| 871 885 | 
             
            /*
         | 
| 872 886 | 
             
             * call-seq:
         | 
| 873 887 | 
             
             *     FieldDescriptor.label => label
         | 
| @@ -1043,6 +1057,7 @@ static void FieldDescriptor_register(VALUE module) { | |
| 1043 1057 | 
             
              rb_define_method(klass, "name", FieldDescriptor_name, 0);
         | 
| 1044 1058 | 
             
              rb_define_method(klass, "type", FieldDescriptor__type, 0);
         | 
| 1045 1059 | 
             
              rb_define_method(klass, "default", FieldDescriptor_default, 0);
         | 
| 1060 | 
            +
              rb_define_method(klass, "json_name", FieldDescriptor_json_name, 0);
         | 
| 1046 1061 | 
             
              rb_define_method(klass, "label", FieldDescriptor_label, 0);
         | 
| 1047 1062 | 
             
              rb_define_method(klass, "number", FieldDescriptor_number, 0);
         | 
| 1048 1063 | 
             
              rb_define_method(klass, "submsg_name", FieldDescriptor_submsg_name, 0);
         | 
| @@ -1750,6 +1765,16 @@ static void msgdef_add_field(VALUE msgbuilder_rb, upb_label_t label, VALUE name, | |
| 1750 1765 | 
             
                      field_proto,
         | 
| 1751 1766 | 
             
                      FileBuilderContext_strdup(self->file_builder, default_value));
         | 
| 1752 1767 | 
             
                }
         | 
| 1768 | 
            +
             | 
| 1769 | 
            +
                if (rb_funcall(options, rb_intern("key?"), 1,
         | 
| 1770 | 
            +
                               ID2SYM(rb_intern("json_name"))) == Qtrue) {
         | 
| 1771 | 
            +
                  VALUE json_name =
         | 
| 1772 | 
            +
                      rb_hash_lookup(options, ID2SYM(rb_intern("json_name")));
         | 
| 1773 | 
            +
             | 
| 1774 | 
            +
                  google_protobuf_FieldDescriptorProto_set_json_name(
         | 
| 1775 | 
            +
                      field_proto,
         | 
| 1776 | 
            +
                      FileBuilderContext_strdup(self->file_builder, json_name));
         | 
| 1777 | 
            +
                }
         | 
| 1753 1778 | 
             
              }
         | 
| 1754 1779 |  | 
| 1755 1780 | 
             
              if (oneof_index >= 0) {
         | 
| @@ -1899,18 +1924,20 @@ static VALUE MessageBuilderContext_required(int argc, VALUE* argv, | |
| 1899 1924 | 
             
             */
         | 
| 1900 1925 | 
             
            static VALUE MessageBuilderContext_repeated(int argc, VALUE* argv,
         | 
| 1901 1926 | 
             
                                                        VALUE _self) {
         | 
| 1902 | 
            -
              VALUE name, type, number | 
| 1927 | 
            +
              VALUE name, type, number;
         | 
| 1928 | 
            +
              VALUE type_class, options = Qnil;
         | 
| 1903 1929 |  | 
| 1904 | 
            -
               | 
| 1905 | 
            -
             | 
| 1930 | 
            +
              rb_scan_args(argc, argv, "32", &name, &type, &number, &type_class, &options);
         | 
| 1931 | 
            +
             | 
| 1932 | 
            +
              // Allow passing (name, type, number, options) or
         | 
| 1933 | 
            +
              // (name, type, number, type_class, options)
         | 
| 1934 | 
            +
              if (argc == 4 && RB_TYPE_P(type_class, T_HASH)) {
         | 
| 1935 | 
            +
                options = type_class;
         | 
| 1936 | 
            +
                type_class = Qnil;
         | 
| 1906 1937 | 
             
              }
         | 
| 1907 | 
            -
              name = argv[0];
         | 
| 1908 | 
            -
              type = argv[1];
         | 
| 1909 | 
            -
              number = argv[2];
         | 
| 1910 | 
            -
              type_class = (argc > 3) ? argv[3] : Qnil;
         | 
| 1911 1938 |  | 
| 1912 1939 | 
             
              msgdef_add_field(_self, UPB_LABEL_REPEATED, name, type, number, type_class,
         | 
| 1913 | 
            -
                                | 
| 1940 | 
            +
                               options, -1, false);
         | 
| 1914 1941 |  | 
| 1915 1942 | 
             
              return Qnil;
         | 
| 1916 1943 | 
             
            }
         | 
| @@ -697,16 +697,13 @@ bool Message_Equal(const upb_msg *m1, const upb_msg *m2, const upb_msgdef *m) { | |
| 697 697 | 
             
             * field is of a primitive type).
         | 
| 698 698 | 
             
             */
         | 
| 699 699 | 
             
            static VALUE Message_eq(VALUE _self, VALUE _other) {
         | 
| 700 | 
            -
              if ( | 
| 701 | 
            -
                return Qfalse;
         | 
| 702 | 
            -
              }
         | 
| 700 | 
            +
              if (CLASS_OF(_self) != CLASS_OF(_other)) return Qfalse;
         | 
| 703 701 |  | 
| 704 702 | 
             
              Message* self = ruby_to_Message(_self);
         | 
| 705 703 | 
             
              Message* other = ruby_to_Message(_other);
         | 
| 704 | 
            +
              assert(self->msgdef == other->msgdef);
         | 
| 706 705 |  | 
| 707 | 
            -
              return Message_Equal(self->msg, other->msg, self->msgdef)
         | 
| 708 | 
            -
                         ? Qtrue
         | 
| 709 | 
            -
                         : Qfalse;
         | 
| 706 | 
            +
              return Message_Equal(self->msg, other->msg, self->msgdef) ? Qtrue : Qfalse;
         | 
| 710 707 | 
             
            }
         | 
| 711 708 |  | 
| 712 709 | 
             
            uint64_t Message_Hash(const upb_msg* msg, const upb_msgdef* m, uint64_t seed) {
         | 
| @@ -37,7 +37,7 @@ | |
| 37 37 | 
             
            #include "message.h"
         | 
| 38 38 | 
             
            #include "repeated_field.h"
         | 
| 39 39 |  | 
| 40 | 
            -
            VALUE  | 
| 40 | 
            +
            VALUE cParseError;
         | 
| 41 41 | 
             
            VALUE cTypeError;
         | 
| 42 42 |  | 
| 43 43 | 
             
            const upb_fielddef* map_field_key(const upb_fielddef* field) {
         | 
| @@ -180,6 +180,7 @@ static void Arena_mark(void *data) { | |
| 180 180 | 
             
            static void Arena_free(void *data) {
         | 
| 181 181 | 
             
              Arena *arena = data;
         | 
| 182 182 | 
             
              upb_arena_free(arena->arena);
         | 
| 183 | 
            +
              xfree(arena);
         | 
| 183 184 | 
             
            }
         | 
| 184 185 |  | 
| 185 186 | 
             
            static VALUE cArena;
         | 
| @@ -251,14 +252,80 @@ void Arena_register(VALUE module) { | |
| 251 252 | 
             
            // The object is used only for its identity; it does not contain any data.
         | 
| 252 253 | 
             
            VALUE secondary_map = Qnil;
         | 
| 253 254 |  | 
| 255 | 
            +
            // Mutations to the map are under a mutex, because SeconaryMap_MaybeGC()
         | 
| 256 | 
            +
            // iterates over the map which cannot happen in parallel with insertions, or
         | 
| 257 | 
            +
            // Ruby will throw:
         | 
| 258 | 
            +
            //   can't add a new key into hash during iteration (RuntimeError)
         | 
| 259 | 
            +
            VALUE secondary_map_mutex = Qnil;
         | 
| 260 | 
            +
             | 
| 261 | 
            +
            // Lambda that will GC entries from the secondary map that are no longer present
         | 
| 262 | 
            +
            // in the primary map.
         | 
| 263 | 
            +
            VALUE gc_secondary_map_lambda = Qnil;
         | 
| 264 | 
            +
            ID length;
         | 
| 265 | 
            +
             | 
| 266 | 
            +
            extern VALUE weak_obj_cache;
         | 
| 267 | 
            +
             | 
| 254 268 | 
             
            static void SecondaryMap_Init() {
         | 
| 255 269 | 
             
              rb_gc_register_address(&secondary_map);
         | 
| 270 | 
            +
              rb_gc_register_address(&gc_secondary_map_lambda);
         | 
| 271 | 
            +
              rb_gc_register_address(&secondary_map_mutex);
         | 
| 256 272 | 
             
              secondary_map = rb_hash_new();
         | 
| 273 | 
            +
              gc_secondary_map_lambda = rb_eval_string(
         | 
| 274 | 
            +
                  "->(secondary, weak) {\n"
         | 
| 275 | 
            +
                  "  secondary.delete_if { |k, v| !weak.key?(v) }\n"
         | 
| 276 | 
            +
                  "}\n");
         | 
| 277 | 
            +
              secondary_map_mutex = rb_mutex_new();
         | 
| 278 | 
            +
              length = rb_intern("length");
         | 
| 257 279 | 
             
            }
         | 
| 258 280 |  | 
| 259 | 
            -
             | 
| 281 | 
            +
            // The secondary map is a regular Hash, and will never shrink on its own.
         | 
| 282 | 
            +
            // The main object cache is a WeakMap that will automatically remove entries
         | 
| 283 | 
            +
            // when the target object is no longer reachable, but unless we manually
         | 
| 284 | 
            +
            // remove the corresponding entries from the secondary map, it will grow
         | 
| 285 | 
            +
            // without bound.
         | 
| 286 | 
            +
            //
         | 
| 287 | 
            +
            // To avoid this unbounded growth we periodically remove entries from the
         | 
| 288 | 
            +
            // secondary map that are no longer present in the WeakMap. The logic of
         | 
| 289 | 
            +
            // how often to perform this GC is an artbirary tuning parameter that
         | 
| 290 | 
            +
            // represents a straightforward CPU/memory tradeoff.
         | 
| 291 | 
            +
            //
         | 
| 292 | 
            +
            // Requires: secondary_map_mutex is held.
         | 
| 293 | 
            +
            static void SecondaryMap_MaybeGC() {
         | 
| 294 | 
            +
              PBRUBY_ASSERT(rb_mutex_locked_p(secondary_map_mutex) == Qtrue);
         | 
| 295 | 
            +
              size_t weak_len = NUM2ULL(rb_funcall(weak_obj_cache, length, 0));
         | 
| 296 | 
            +
              size_t secondary_len = RHASH_SIZE(secondary_map);
         | 
| 297 | 
            +
              if (secondary_len < weak_len) {
         | 
| 298 | 
            +
                // Logically this case should not be possible: a valid entry cannot exist in
         | 
| 299 | 
            +
                // the weak table unless there is a corresponding entry in the secondary
         | 
| 300 | 
            +
                // table. It should *always* be the case that secondary_len >= weak_len.
         | 
| 301 | 
            +
                //
         | 
| 302 | 
            +
                // However ObjectSpace::WeakMap#length (and therefore weak_len) is
         | 
| 303 | 
            +
                // unreliable: it overreports its true length by including non-live objects.
         | 
| 304 | 
            +
                // However these non-live objects are not yielded in iteration, so we may
         | 
| 305 | 
            +
                // have previously deleted them from the secondary map in a previous
         | 
| 306 | 
            +
                // invocation of SecondaryMap_MaybeGC().
         | 
| 307 | 
            +
                //
         | 
| 308 | 
            +
                // In this case, we can't measure any waste, so we just return.
         | 
| 309 | 
            +
                return;
         | 
| 310 | 
            +
              }
         | 
| 311 | 
            +
              size_t waste = secondary_len - weak_len;
         | 
| 312 | 
            +
              // GC if we could remove at least 2000 entries or 20% of the table size
         | 
| 313 | 
            +
              // (whichever is greater).  Since the cost of the GC pass is O(N), we
         | 
| 314 | 
            +
              // want to make sure that we condition this on overall table size, to
         | 
| 315 | 
            +
              // avoid O(N^2) CPU costs.
         | 
| 316 | 
            +
              size_t threshold = PBRUBY_MAX(secondary_len * 0.2, 2000);
         | 
| 317 | 
            +
              if (waste > threshold) {
         | 
| 318 | 
            +
                rb_funcall(gc_secondary_map_lambda, rb_intern("call"), 2,
         | 
| 319 | 
            +
                           secondary_map, weak_obj_cache);
         | 
| 320 | 
            +
              }
         | 
| 321 | 
            +
            }
         | 
| 322 | 
            +
             | 
| 323 | 
            +
            // Requires: secondary_map_mutex is held by this thread iff create == true.
         | 
| 324 | 
            +
            static VALUE SecondaryMap_Get(VALUE key, bool create) {
         | 
| 325 | 
            +
              PBRUBY_ASSERT(!create || rb_mutex_locked_p(secondary_map_mutex) == Qtrue);
         | 
| 260 326 | 
             
              VALUE ret = rb_hash_lookup(secondary_map, key);
         | 
| 261 | 
            -
              if (ret == Qnil) {
         | 
| 327 | 
            +
              if (ret == Qnil && create) {
         | 
| 328 | 
            +
                SecondaryMap_MaybeGC();
         | 
| 262 329 | 
             
                ret = rb_eval_string("Object.new");
         | 
| 263 330 | 
             
                rb_hash_aset(secondary_map, key, ret);
         | 
| 264 331 | 
             
              }
         | 
| @@ -267,14 +334,15 @@ static VALUE SecondaryMap_Get(VALUE key) { | |
| 267 334 |  | 
| 268 335 | 
             
            #endif
         | 
| 269 336 |  | 
| 270 | 
            -
             | 
| 337 | 
            +
            // Requires: secondary_map_mutex is held by this thread iff create == true.
         | 
| 338 | 
            +
            static VALUE ObjectCache_GetKey(const void* key, bool create) {
         | 
| 271 339 | 
             
              char buf[sizeof(key)];
         | 
| 272 340 | 
             
              memcpy(&buf, &key, sizeof(key));
         | 
| 273 341 | 
             
              intptr_t key_int = (intptr_t)key;
         | 
| 274 342 | 
             
              PBRUBY_ASSERT((key_int & 3) == 0);
         | 
| 275 343 | 
             
              VALUE ret = LL2NUM(key_int >> 2);
         | 
| 276 344 | 
             
            #if USE_SECONDARY_MAP
         | 
| 277 | 
            -
              ret = SecondaryMap_Get(ret);
         | 
| 345 | 
            +
              ret = SecondaryMap_Get(ret, create);
         | 
| 278 346 | 
             
            #endif
         | 
| 279 347 | 
             
              return ret;
         | 
| 280 348 | 
             
            }
         | 
| @@ -298,14 +366,20 @@ static void ObjectCache_Init() { | |
| 298 366 |  | 
| 299 367 | 
             
            void ObjectCache_Add(const void* key, VALUE val) {
         | 
| 300 368 | 
             
              PBRUBY_ASSERT(ObjectCache_Get(key) == Qnil);
         | 
| 301 | 
            -
             | 
| 369 | 
            +
            #if USE_SECONDARY_MAP
         | 
| 370 | 
            +
              rb_mutex_lock(secondary_map_mutex);
         | 
| 371 | 
            +
            #endif
         | 
| 372 | 
            +
              VALUE key_rb = ObjectCache_GetKey(key, true);
         | 
| 302 373 | 
             
              rb_funcall(weak_obj_cache, item_set, 2, key_rb, val);
         | 
| 374 | 
            +
            #if USE_SECONDARY_MAP
         | 
| 375 | 
            +
              rb_mutex_unlock(secondary_map_mutex);
         | 
| 376 | 
            +
            #endif
         | 
| 303 377 | 
             
              PBRUBY_ASSERT(ObjectCache_Get(key) == val);
         | 
| 304 378 | 
             
            }
         | 
| 305 379 |  | 
| 306 380 | 
             
            // Returns the cached object for this key, if any. Otherwise returns Qnil.
         | 
| 307 381 | 
             
            VALUE ObjectCache_Get(const void* key) {
         | 
| 308 | 
            -
              VALUE key_rb = ObjectCache_GetKey(key);
         | 
| 382 | 
            +
              VALUE key_rb = ObjectCache_GetKey(key, false);
         | 
| 309 383 | 
             
              return rb_funcall(weak_obj_cache, item_get, 1, key_rb);
         | 
| 310 384 | 
             
            }
         | 
| 311 385 |  | 
| @@ -368,8 +442,10 @@ void Init_protobuf_c() { | |
| 368 442 | 
             
              Map_register(protobuf);
         | 
| 369 443 | 
             
              Message_register(protobuf);
         | 
| 370 444 |  | 
| 371 | 
            -
               | 
| 445 | 
            +
              cParseError = rb_const_get(protobuf, rb_intern("ParseError"));
         | 
| 446 | 
            +
              rb_gc_register_mark_object(cParseError);
         | 
| 372 447 | 
             
              cTypeError = rb_const_get(protobuf, rb_intern("TypeError"));
         | 
| 448 | 
            +
              rb_gc_register_mark_object(cTypeError);
         | 
| 373 449 |  | 
| 374 450 | 
             
              rb_define_singleton_method(protobuf, "discard_unknown",
         | 
| 375 451 | 
             
                                         Google_Protobuf_discard_unknown, 1);
         | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: google-protobuf
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 3. | 
| 4 | 
            +
              version: 3.16.0
         | 
| 5 5 | 
             
            platform: universal-darwin
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Protobuf Authors
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2021- | 
| 11 | 
            +
            date: 2021-05-06 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rake-compiler-dock
         | 
| @@ -128,7 +128,7 @@ homepage: https://developers.google.com/protocol-buffers | |
| 128 128 | 
             
            licenses:
         | 
| 129 129 | 
             
            - BSD-3-Clause
         | 
| 130 130 | 
             
            metadata:
         | 
| 131 | 
            -
              source_code_uri: https://github.com/protocolbuffers/protobuf/tree/v3. | 
| 131 | 
            +
              source_code_uri: https://github.com/protocolbuffers/protobuf/tree/v3.16.0/ruby
         | 
| 132 132 | 
             
            post_install_message: 
         | 
| 133 133 | 
             
            rdoc_options: []
         | 
| 134 134 | 
             
            require_paths:
         | 
| @@ -147,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 147 147 | 
             
                - !ruby/object:Gem::Version
         | 
| 148 148 | 
             
                  version: '0'
         | 
| 149 149 | 
             
            requirements: []
         | 
| 150 | 
            -
            rubygems_version: 3.2. | 
| 150 | 
            +
            rubygems_version: 3.2.17
         | 
| 151 151 | 
             
            signing_key: 
         | 
| 152 152 | 
             
            specification_version: 4
         | 
| 153 153 | 
             
            summary: Protocol Buffers
         |