}
}
-static int qemudStartWorker(struct qemud_server *server,
- struct qemud_worker *worker) {
+static int
+qemudStartWorker(struct qemud_server *server,
+ struct qemud_worker *worker)
+{
pthread_attr_t attr;
- pthread_attr_init(&attr);
+ int ret = -1;
+
+ if (pthread_attr_init(&attr) != 0)
+ return -1;
/* We want to join workers, so don't detach them */
/*pthread_attr_setdetachstate(&attr, 1);*/
if (worker->hasThread)
- return -1;
+ goto cleanup;
worker->server = server;
worker->hasThread = 1;
worker) != 0) {
worker->hasThread = 0;
worker->server = NULL;
- return -1;
+ goto cleanup;
}
- return 0;
+ ret = 0;
+cleanup:
+ pthread_attr_destroy(&attr);
+ return ret;
}
}
-static int qemudStartEventLoop(struct qemud_server *server) {
+static int
+qemudStartEventLoop(struct qemud_server *server)
+{
pthread_attr_t attr;
- pthread_attr_init(&attr);
+ int ret = -1;
+
+ if (pthread_attr_init(&attr) != 0)
+ return -1;
/* We want to join the eventloop, so don't detach it */
/*pthread_attr_setdetachstate(&attr, 1);*/
&attr,
qemudRunLoop,
server) != 0)
- return -1;
+ goto cleanup;
server->hasEventThread = 1;
- return 0;
+ ret = 0;
+cleanup:
+ pthread_attr_destroy(&attr);
+ return ret;
}
{
struct virThreadArgs *args;
pthread_attr_t attr;
- pthread_attr_init(&attr);
- if (VIR_ALLOC(args) < 0)
- return -1;
+ int ret = -1;
+ int err;
+
+ if ((err = pthread_attr_init(&attr)) != 0)
+ goto cleanup;
+ if (VIR_ALLOC(args) < 0) {
+ err = ENOMEM;
+ goto cleanup;
+ }
args->func = func;
args->opaque = opaque;
if (!joinable)
pthread_attr_setdetachstate(&attr, 1);
- int ret = pthread_create(&thread->thread, &attr, virThreadHelper, args);
- if (ret != 0) {
+ err = pthread_create(&thread->thread, &attr, virThreadHelper, args);
+ if (err != 0) {
VIR_FREE(args);
- errno = ret;
- return -1;
+ goto cleanup;
}
/* New thread owns 'args' in success case, so don't free */
- return 0;
+
+ ret = 0;
+cleanup:
+ pthread_attr_destroy(&attr);
+ if (ret < 0)
+ errno = err;
+ return ret;
}
void virThreadSelf(virThreadPtr thread)