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