浏览代码

vendor: github.com/containerd/typeurl v1.0.2

Fixes locking for getTypeByUrl

full diff: https://github.com/containerd/typeurl/compare/v1.0.1...v1.0.2

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Sebastiaan van Stijn 4 年之前
父节点
当前提交
989cd6e8f6

+ 1 - 1
vendor.conf

@@ -138,7 +138,7 @@ github.com/containerd/continuity                    bce1c3f9669b6f3e7f6656ee715b
 github.com/containerd/cgroups                       b9de8a2212026c07cec67baf3323f1fc0121e048 # v1.0.1
 github.com/containerd/cgroups                       b9de8a2212026c07cec67baf3323f1fc0121e048 # v1.0.1
 github.com/containerd/console                       2f1e3d2b6afd18e8b2077816c711205a0b4d8769 # v1.0.2
 github.com/containerd/console                       2f1e3d2b6afd18e8b2077816c711205a0b4d8769 # v1.0.2
 github.com/containerd/go-runc                       16b287bc67d069a60fa48db15f330b790b74365b # v1.0.0
 github.com/containerd/go-runc                       16b287bc67d069a60fa48db15f330b790b74365b # v1.0.0
-github.com/containerd/typeurl                       cd3ce7159eae562a4f60ceff37dada11a939d247 # v1.0.1
+github.com/containerd/typeurl                       5e43fb8b75ed2f2305fc04e6918c8d10636771bc # v1.0.2
 github.com/containerd/ttrpc                         bfba540dc45464586c106b1f31c8547933c1eb41 # v1.0.2
 github.com/containerd/ttrpc                         bfba540dc45464586c106b1f31c8547933c1eb41 # v1.0.2
 github.com/gogo/googleapis                          01e0f9cca9b92166042241267ee2a5cdf5cff46c # v1.3.2
 github.com/gogo/googleapis                          01e0f9cca9b92166042241267ee2a5cdf5cff46c # v1.3.2
 github.com/cilium/ebpf                              ef54c303d1fff1e80a9bf20f00a378fde5419d61 # v0.5.0
 github.com/cilium/ebpf                              ef54c303d1fff1e80a9bf20f00a378fde5419d61 # v0.5.0

+ 3 - 2
vendor/github.com/containerd/typeurl/README.md

@@ -1,8 +1,9 @@
 # typeurl
 # typeurl
 
 
-[![Build Status](https://travis-ci.org/containerd/typeurl.svg?branch=master)](https://travis-ci.org/containerd/typeurl)
-
+[![PkgGoDev](https://pkg.go.dev/badge/github.com/containerd/typeurl)](https://pkg.go.dev/github.com/containerd/typeurl)
+[![Build Status](https://github.com/containerd/typeurl/workflows/CI/badge.svg)](https://github.com/containerd/typeurl/actions?query=workflow%3ACI)
 [![codecov](https://codecov.io/gh/containerd/typeurl/branch/master/graph/badge.svg)](https://codecov.io/gh/containerd/typeurl)
 [![codecov](https://codecov.io/gh/containerd/typeurl/branch/master/graph/badge.svg)](https://codecov.io/gh/containerd/typeurl)
+[![Go Report Card](https://goreportcard.com/badge/github.com/containerd/typeurl)](https://goreportcard.com/report/github.com/containerd/typeurl)
 
 
 A Go package for managing the registration, marshaling, and unmarshaling of encoded types.
 A Go package for managing the registration, marshaling, and unmarshaling of encoded types.
 
 

+ 1 - 1
vendor/github.com/containerd/typeurl/go.mod

@@ -3,6 +3,6 @@ module github.com/containerd/typeurl
 go 1.13
 go 1.13
 
 
 require (
 require (
-	github.com/gogo/protobuf v1.3.1
+	github.com/gogo/protobuf v1.3.2
 	github.com/pkg/errors v0.9.1
 	github.com/pkg/errors v0.9.1
 )
 )

+ 23 - 4
vendor/github.com/containerd/typeurl/types.go

@@ -28,11 +28,20 @@ import (
 )
 )
 
 
 var (
 var (
-	mu       sync.Mutex
+	mu       sync.RWMutex
 	registry = make(map[reflect.Type]string)
 	registry = make(map[reflect.Type]string)
 )
 )
 
 
-var ErrNotFound = errors.New("not found")
+// Definitions of common error types used throughout typeurl.
+//
+// These error types are used with errors.Wrap and errors.Wrapf to add context
+// to an error.
+//
+// To detect an error class, use errors.Is() functions to tell whether an
+// error is of this type.
+var (
+	ErrNotFound = errors.New("not found")
+)
 
 
 // Register a type with a base URL for JSON marshaling. When the MarshalAny and
 // Register a type with a base URL for JSON marshaling. When the MarshalAny and
 // UnmarshalAny functions are called they will treat the Any type value as JSON.
 // UnmarshalAny functions are called they will treat the Any type value as JSON.
@@ -56,9 +65,9 @@ func Register(v interface{}, args ...string) {
 
 
 // TypeURL returns the type url for a registered type.
 // TypeURL returns the type url for a registered type.
 func TypeURL(v interface{}) (string, error) {
 func TypeURL(v interface{}) (string, error) {
-	mu.Lock()
+	mu.RLock()
 	u, ok := registry[tryDereference(v)]
 	u, ok := registry[tryDereference(v)]
-	mu.Unlock()
+	mu.RUnlock()
 	if !ok {
 	if !ok {
 		// fallback to the proto registry if it is a proto message
 		// fallback to the proto registry if it is a proto message
 		pb, ok := v.(proto.Message)
 		pb, ok := v.(proto.Message)
@@ -119,14 +128,21 @@ func UnmarshalAny(any *types.Any) (interface{}, error) {
 	return UnmarshalByTypeURL(any.TypeUrl, any.Value)
 	return UnmarshalByTypeURL(any.TypeUrl, any.Value)
 }
 }
 
 
+// UnmarshalByTypeURL unmarshals the given type and value to into a concrete type.
 func UnmarshalByTypeURL(typeURL string, value []byte) (interface{}, error) {
 func UnmarshalByTypeURL(typeURL string, value []byte) (interface{}, error) {
 	return unmarshal(typeURL, value, nil)
 	return unmarshal(typeURL, value, nil)
 }
 }
 
 
+// UnmarshalTo unmarshals the any type into a concrete type passed in the out
+// argument. It is identical to UnmarshalAny, but lets clients provide a
+// destination type through the out argument.
 func UnmarshalTo(any *types.Any, out interface{}) error {
 func UnmarshalTo(any *types.Any, out interface{}) error {
 	return UnmarshalToByTypeURL(any.TypeUrl, any.Value, out)
 	return UnmarshalToByTypeURL(any.TypeUrl, any.Value, out)
 }
 }
 
 
+// UnmarshalTo unmarshals the given type and value into a concrete type passed
+// in the out argument. It is identical to UnmarshalByTypeURL, but lets clients
+// provide a destination type through the out argument.
 func UnmarshalToByTypeURL(typeURL string, value []byte, out interface{}) error {
 func UnmarshalToByTypeURL(typeURL string, value []byte, out interface{}) error {
 	_, err := unmarshal(typeURL, value, out)
 	_, err := unmarshal(typeURL, value, out)
 	return err
 	return err
@@ -166,13 +182,16 @@ type urlType struct {
 }
 }
 
 
 func getTypeByUrl(url string) (urlType, error) {
 func getTypeByUrl(url string) (urlType, error) {
+	mu.RLock()
 	for t, u := range registry {
 	for t, u := range registry {
 		if u == url {
 		if u == url {
+			mu.RUnlock()
 			return urlType{
 			return urlType{
 				t: t,
 				t: t,
 			}, nil
 			}, nil
 		}
 		}
 	}
 	}
+	mu.RUnlock()
 	// fallback to proto registry
 	// fallback to proto registry
 	t := proto.MessageType(url)
 	t := proto.MessageType(url)
 	if t != nil {
 	if t != nil {