on success, errno on fail and return the jobid in a separate variable.
I need this fix for my vfs_aio_pthread.c module.
Autobuild-User: Jeremy Allison <jra@samba.org>
Autobuild-Date: Thu Dec 22 12:12:33 CET 2011 on sn-devel-104
int i, num_pending;
int job_id;
int i, num_pending;
int job_id;
- job_id = pthreadpool_finished_job(ctx->pool);
- if (job_id <= 0) {
+ if (pthreadpool_finished_job(ctx->pool, &job_id) != 0) {
* Fetch a finished job number from the signal pipe
*/
* Fetch a finished job number from the signal pipe
*/
-int pthreadpool_finished_job(struct pthreadpool *pool)
+int pthreadpool_finished_job(struct pthreadpool *pool, int *jobid)
ssize_t nread;
nread = -1;
errno = EINTR;
while ((nread == -1) && (errno == EINTR)) {
ssize_t nread;
nread = -1;
errno = EINTR;
while ((nread == -1) && (errno == EINTR)) {
- nread = read(pool->sig_pipe[0], &result, sizeof(int));
+ nread = read(pool->sig_pipe[0], &ret_jobid, sizeof(int));
}
if (nread == -1) {
return errno;
}
if (nread == -1) {
return errno;
if (nread != sizeof(int)) {
return EINVAL;
}
if (nread != sizeof(int)) {
return EINVAL;
}
+ *jobid = ret_jobid;
+ return 0;
* pthreadpool_signal_fd() is readable.
*
* @param[in] pool The pool to query for finished jobs
* pthreadpool_signal_fd() is readable.
*
* @param[in] pool The pool to query for finished jobs
- * @return The job_id of the finished job
+ * @param[out] pjobid The job_id of the finished job
+ * @return success: 0, failure: errno
-int pthreadpool_finished_job(struct pthreadpool *pool);
+int pthreadpool_finished_job(struct pthreadpool *pool, int *jobid);
}
for (i=0; i<num_jobs; i++) {
}
for (i=0; i<num_jobs; i++) {
- ret = pthreadpool_finished_job(p);
- if ((ret < 0) || (ret >= num_jobs)) {
- fprintf(stderr, "invalid job number %d\n", ret);
+ int jobid = -1;
+ ret = pthreadpool_finished_job(p, &jobid);
+ if ((ret != 0) || (jobid >= num_jobs)) {
+ fprintf(stderr, "invalid job number %d\n", jobid);
}
for (i=0; i<num_jobs; i++) {
}
for (i=0; i<num_jobs; i++) {
}
for (j=0; j<num_pools; j++) {
}
for (j=0; j<num_pools; j++) {
if ((pfds[j].revents & (POLLIN|POLLHUP)) == 0) {
continue;
}
if ((pfds[j].revents & (POLLIN|POLLHUP)) == 0) {
continue;
}
- ret = pthreadpool_finished_job(pools[j]);
- if ((ret < 0) || (ret >= num_jobs * num_threads)) {
+ ret = pthreadpool_finished_job(pools[j], &jobid);
+ if ((ret != 0) || (jobid >= num_jobs * num_threads)) {
fprintf(stderr, "invalid job number %d\n",
fprintf(stderr, "invalid job number %d\n",