* Test for a panic inside global internal meter instrument's Unbind
* Fix a possible nil-dereference crash
There is a nil dereference crash if we perform some operations in
certain order:
- get a global meter
- create an instrument
- bind it
- set the delegate
- unbind the instrument
- call some recording function on the not-really-bound-anymore
instrument
Unbind will run the no op run-once initialization routine, so the
follow-up RecordOne call will not run it's initialization
routine. Which RecordOne's initialization routine being skipped, the
delegate to bounded instrument is not set, but the code is still
trying to get a pointer to it and then unconditionally dereference it.
Add an extra check for a nil pointer - if this is true, then Unbind
was first and RecordOne should effectively be a no op.
Co-authored-by: Joshua MacDonald <jmacd@users.noreply.github.com>
* Initial skeleton
* Revert noop provider removal
* Checkpoint
* Checkpoint
* Implement Bound instrument and LabelSet
* Add test
* Add a benchmark
* Add a release test
* Document LabelSetDelegator
* Lint and comments
* Add a second Meter test; fix typo; add a panic
* Add a test for the builtin SDK
* Address feedback