@@ -63,9 +63,9 @@ const (
6363
6464 // defaultRPCTimeout is the default tchannel rpc call timeout
6565 defaultRPCTimeout = 10 * time .Second
66- //minRPCTimeout is minimum rpc call timeout allowed
66+ // minRPCTimeout is minimum rpc call timeout allowed
6767 minRPCTimeout = 1 * time .Second
68- //maxRPCTimeout is maximum rpc call timeout allowed
68+ // maxRPCTimeout is maximum rpc call timeout allowed
6969 maxRPCTimeout = 5 * time .Second
7070 // maxQueryRPCTimeout is the maximum rpc call timeout allowed for query
7171 maxQueryRPCTimeout = 20 * time .Second
@@ -243,6 +243,9 @@ func getErrorDetails(err error, dataConverter DataConverter) (string, []byte) {
243243 case * CustomError :
244244 var data []byte
245245 var err0 error
246+ if err == nil {
247+ return errReasonGeneric , []byte (fmt .Sprintf (badNilErrMsgFmt , err ))
248+ }
246249 switch details := err .details .(type ) {
247250 case ErrorDetailsValues :
248251 data , err0 = encodeArgs (dataConverter , details )
@@ -258,6 +261,10 @@ func getErrorDetails(err error, dataConverter DataConverter) (string, []byte) {
258261 case * CanceledError :
259262 var data []byte
260263 var err0 error
264+ if err == nil {
265+ // treat this as a failure, not a cancel, as it likely is not a real cancel
266+ return errReasonGeneric , []byte (fmt .Sprintf (badNilErrMsgFmt , err ))
267+ }
261268 switch details := err .details .(type ) {
262269 case ErrorDetailsValues :
263270 data , err0 = encodeArgs (dataConverter , details )
@@ -271,6 +278,10 @@ func getErrorDetails(err error, dataConverter DataConverter) (string, []byte) {
271278 }
272279 return errReasonCanceled , data
273280 case * PanicError :
281+ if err == nil {
282+ // treat this as a failure, not a panic, as it likely is not a real panic
283+ return errReasonGeneric , []byte (fmt .Sprintf (badNilErrMsgFmt , err ))
284+ }
274285 data , err0 := encodeArgs (dataConverter , []interface {}{err .Error (), err .StackTrace ()})
275286 if err0 != nil {
276287 panic (err0 )
@@ -279,6 +290,10 @@ func getErrorDetails(err error, dataConverter DataConverter) (string, []byte) {
279290 case * TimeoutError :
280291 var data []byte
281292 var err0 error
293+ if err == nil {
294+ // treat this as a failure, not a timeout, as it likely is not a real timeout
295+ return errReasonGeneric , []byte (fmt .Sprintf (badNilErrMsgFmt , err ))
296+ }
282297 switch details := err .details .(type ) {
283298 case ErrorDetailsValues :
284299 data , err0 = encodeArgs (dataConverter , details )
0 commit comments