ref: Fix a couple of leaked context cancellations.

Change-Id: Icb81d80b85dcd0f46a6b97e560e31aaaa66f4d1c
diff --git a/lib/discovery/discovery.go b/lib/discovery/discovery.go
index 54b8c6e..e0cb578 100644
--- a/lib/discovery/discovery.go
+++ b/lib/discovery/discovery.go
@@ -80,7 +80,8 @@
 
 func (d *idiscovery) removeTask(ctx *context.T) {
 	d.mu.Lock()
-	if _, exist := d.tasks[ctx]; exist {
+	if cancel, exist := d.tasks[ctx]; exist {
+		cancel()
 		delete(d.tasks, ctx)
 		d.wg.Done()
 	}
diff --git a/runtime/internal/rpc/client.go b/runtime/internal/rpc/client.go
index 04e622c..3c5d528 100644
--- a/runtime/internal/rpc/client.go
+++ b/runtime/internal/rpc/client.go
@@ -200,6 +200,7 @@
 	connOpts := getConnectionOptions(ctx, opts)
 	r, err := c.connectToName(ctx, name, "", nil, connOpts, opts)
 	if err != nil {
+		cancel()
 		return nil, err
 	}
 	pinned := &pinnedConn{
diff --git a/runtime/internal/rpc/typecache.go b/runtime/internal/rpc/typecache.go
index 29de6b4..1911543 100644
--- a/runtime/internal/rpc/typecache.go
+++ b/runtime/internal/rpc/typecache.go
@@ -52,6 +52,8 @@
 				tce.enc = vom.NewTypeEncoder(f)
 				tce.dec = vom.NewTypeDecoder(f)
 				tce.dec.Start() // Stopped in collect()
+			} else {
+				c()
 			}
 			close(tce.ready)
 		}