From a980bc5de261adac1b4210fa467c2a0e0a6737e3 Mon Sep 17 00:00:00 2001 From: mikespook Date: Mon, 4 Jun 2012 17:20:04 +0800 Subject: [PATCH] time out not work --- common/error.go | 1 + worker/worker.go | 22 +++++++--------------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/common/error.go b/common/error.go index ccb337a..1d53f7e 100644 --- a/common/error.go +++ b/common/error.go @@ -24,6 +24,7 @@ var ( ErrFuncNotFound = errors.New("The function was not found.") ErrConnection = errors.New("Connection error.") ErrNoActiveAgent = errors.New("No active agent.") + ErrExecTimeOut = errors.New("Executing time out.") ) func DisablePanic() {recover()} diff --git a/worker/worker.go b/worker/worker.go index 3c64f93..708a7f2 100644 --- a/worker/worker.go +++ b/worker/worker.go @@ -5,7 +5,6 @@ package worker import ( - "time" "bytes" "bitbucket.org/mikespook/gearman-go/common" ) @@ -238,6 +237,12 @@ func (worker *Worker) SetId(id string) { // Execute the job. And send back the result. func (worker *Worker) exec(job *Job) (err error) { + if worker.limit != nil { + <-worker.limit + defer func() { + worker.limit <- true + }() + } var limit int if job.DataType == common.JOB_ASSIGN { limit = 3 @@ -257,20 +262,7 @@ func (worker *Worker) exec(job *Job) (err error) { if !ok { return common.Errorf("The function does not exist: %s", funcname) } - var result []byte - if worker.limit != nil { - select { - case <-worker.limit: - defer func() { - worker.limit <- true - }() - case <-time.After(time.Second * time.Duration(f.timeout)): - err = common.Errorf("The function was executed timeout: %s", funcname) - } - } - if err == nil { - result, err = f.f(job) - } + result, err := f.f(job) var datatype uint32 if err == nil { datatype = common.WORK_COMPLETE