@@ -162,27 +162,23 @@ func prepareMethod(method reflect.Method) *methodType {
162162 return & methodType {method : method , ArgType : argType , ReplyType : replyType , ContextType : contextType , stream : stream }
163163}
164164
165- func (router * router ) sendResponse (sending sync.Locker , req * request , reply interface {}, cc codec.Writer , errmsg string , last bool ) ( err error ) {
165+ func (router * router ) sendResponse (sending sync.Locker , req * request , reply interface {}, cc codec.Writer , last bool ) error {
166166 msg := new (codec.Message )
167167 msg .Type = codec .Response
168168 resp := router .getResponse ()
169169 resp .msg = msg
170170
171- // Encode the response header
172- resp .msg .Endpoint = req .msg .Endpoint
173- if errmsg != "" {
174- resp .msg .Error = errmsg
175- reply = invalidRequest
176- }
177171 resp .msg .Id = req .msg .Id
178172 sending .Lock ()
179- err = cc .Write (resp .msg , reply )
173+ err : = cc .Write (resp .msg , reply )
180174 sending .Unlock ()
181175 router .freeResponse (resp )
182176 return err
183177}
184178
185- func (s * service ) call (ctx context.Context , router * router , sending * sync.Mutex , mtype * methodType , req * request , argv , replyv reflect.Value , cc codec.Writer ) {
179+ func (s * service ) call (ctx context.Context , router * router , sending * sync.Mutex , mtype * methodType , req * request , argv , replyv reflect.Value , cc codec.Writer ) error {
180+ defer router .freeRequest (req )
181+
186182 function := mtype .method .Func
187183 var returnValues []reflect.Value
188184
@@ -206,18 +202,13 @@ func (s *service) call(ctx context.Context, router *router, sending *sync.Mutex,
206202 return nil
207203 }
208204
209- errmsg := ""
210- err := fn (ctx , r , replyv .Interface ())
211- if err != nil {
212- errmsg = err .Error ()
205+ // execute handler
206+ if err := fn (ctx , r , replyv .Interface ()); err != nil {
207+ return err
213208 }
214209
215- err = router .sendResponse (sending , req , replyv .Interface (), cc , errmsg , true )
216- if err != nil {
217- log .Log ("rpc call: unable to send response: " , err )
218- }
219- router .freeRequest (req )
220- return
210+ // send response
211+ return router .sendResponse (sending , req , replyv .Interface (), cc , true )
221212 }
222213
223214 // declare a local error to see if we errored out already
@@ -250,16 +241,15 @@ func (s *service) call(ctx context.Context, router *router, sending *sync.Mutex,
250241 // client.Stream request
251242 r .stream = true
252243
253- errmsg := ""
244+ // execute handler
254245 if err := fn (ctx , r , stream ); err != nil {
255- errmsg = err . Error ()
246+ return err
256247 }
257248
258249 // this is the last packet, we don't do anything with
259250 // the error here (well sendStreamResponse will log it
260251 // already)
261- router .sendResponse (sending , req , nil , cc , errmsg , true )
262- router .freeRequest (req )
252+ return router .sendResponse (sending , req , nil , cc , true )
263253}
264254
265255func (m * methodType ) prepareContext (ctx context.Context ) reflect.Value {
@@ -448,11 +438,9 @@ func (router *router) ServeRequest(ctx context.Context, r Request, rsp Response)
448438 }
449439 // send a response if we actually managed to read a header.
450440 if req != nil {
451- router .sendResponse (sending , req , invalidRequest , rsp .Codec (), err .Error (), true )
452441 router .freeRequest (req )
453442 }
454443 return err
455444 }
456- service .call (ctx , router , sending , mtype , req , argv , replyv , rsp .Codec ())
457- return nil
445+ return service .call (ctx , router , sending , mtype , req , argv , replyv , rsp .Codec ())
458446}
0 commit comments