From 95b916ecd4f7ace04dc5af43c4073add1eaaf8ee Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Fri, 25 Jul 2014 10:16:20 -0400 Subject: [PATCH] thread pool: mark epicsJobCreate() as safe for job functions Also, use epicsJobMove() to avoid some redundant code --- src/libCom/pool/epicsThreadPool.h | 1 + src/libCom/pool/poolJob.c | 10 ++-------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/libCom/pool/epicsThreadPool.h b/src/libCom/pool/epicsThreadPool.h index 2bb176dec..1f2d12069 100644 --- a/src/libCom/pool/epicsThreadPool.h +++ b/src/libCom/pool/epicsThreadPool.h @@ -100,6 +100,7 @@ epicsShareExtern void* _epicsJobArgSelf; /* creates, but does not add, a new job. * If pool in NULL then the job is not associated with any pool and * epicsJobMove() must be called before epicsJobQueue() + * Safe to call from a running job function. * returns a new job pointer, or NULL on error */ epicsShareFunc epicsJob* epicsJobCreate(epicsThreadPool* pool, diff --git a/src/libCom/pool/poolJob.c b/src/libCom/pool/poolJob.c index 3016f4298..b351a37ab 100644 --- a/src/libCom/pool/poolJob.c +++ b/src/libCom/pool/poolJob.c @@ -152,17 +152,11 @@ epicsJob* epicsJobCreate(epicsThreadPool* pool, if(arg==&_epicsJobArgSelf) arg=job; - job->pool=pool; + job->pool=NULL; job->func=func; job->arg=arg; - if(pool) { - epicsMutexMustLock(pool->guard); - - ellAdd(&pool->owned, &job->jobnode); - - epicsMutexUnlock(pool->guard); - } + epicsJobMove(job, pool); return job; }