More changes to probe to avoid nil dereferences

master
Harshavardhana 10 years ago
parent a096913dde
commit 884e9771b2
  1. 20
      pkg/probe/probe.go

@ -78,6 +78,10 @@ func New(e error) *Error {
// Trace records the point at which it is invoked. Stack traces are important for
// debugging purposes.
func (e *Error) Trace(fields ...string) *Error {
if e == nil {
return nil
}
e.lock.Lock()
defer e.lock.Unlock()
@ -103,6 +107,9 @@ func (e *Error) trace(fields ...string) *Error {
// Untrace erases last trace entry.
func (e *Error) Untrace() {
if e == nil {
return
}
e.lock.Lock()
defer e.lock.Unlock()
@ -116,14 +123,21 @@ func (e *Error) Untrace() {
// Error returns error string.
func (e *Error) Error() string {
if e == nil {
return "<nil>"
}
return e.String()
}
// String returns error message.
func (e *Error) String() string {
if e == nil {
return "<nil>"
}
e.lock.RLock()
defer e.lock.RUnlock()
if e.e != nil {
trace := e.e.Error() + "\n"
for i, tp := range e.tracePoints {
if len(tp.Env) > 0 {
@ -141,10 +155,16 @@ func (e *Error) String() string {
trace += "Heap:" + e.sysInfo["mem.heap.used"] + "/" + e.sysInfo["mem.heap.total"]
return trace
}
return "<nil>"
}
// JSON returns JSON formated error trace.
func (e *Error) JSON() string {
if e == nil {
return "<nil>"
}
e.lock.RLock()
defer e.lock.RUnlock()

Loading…
Cancel
Save