| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package impl |
| |
| import ( |
| "v.io/v23/context" |
| "v.io/v23/verror" |
| "v.io/x/lib/vlog" |
| |
| "v.io/x/ref/lib/exec" |
| "v.io/x/ref/lib/mgmt" |
| "v.io/x/ref/services/device" |
| ) |
| |
| // InvokeCallback provides the parent device manager with the given name (which |
| // is expected to be this device manager's object name). |
| func InvokeCallback(ctx *context.T, name string) { |
| handle, err := exec.GetChildHandle() |
| if err == nil { |
| // Device manager was started by self-update, notify the parent. |
| callbackName, err := handle.Config.Get(mgmt.ParentNameConfigKey) |
| if err != nil { |
| // Device manager was not started by self-update, return silently. |
| return |
| } |
| client := device.ConfigClient(callbackName) |
| ctx, cancel := context.WithTimeout(ctx, rpcContextTimeout) |
| defer cancel() |
| if err := client.Set(ctx, mgmt.ChildNameConfigKey, name); err != nil { |
| vlog.Fatalf("Set(%v, %v) failed: %v", mgmt.ChildNameConfigKey, name, err) |
| } |
| } else if verror.ErrorID(err) != exec.ErrNoVersion.ID { |
| vlog.Fatalf("GetChildHandle() failed: %v", err) |
| } |
| } |