From 7855893959b44d12f9e333278e325e49f47c5a9f Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Sat, 29 Apr 2023 10:04:56 +0200 Subject: make struct worker opaque --- src/worker.c | 24 ++++++++++++++++++++++-- src/worker.h | 10 ++-------- src/worker_main.c | 6 +++--- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/worker.c b/src/worker.c index 7487e62..474be1c 100644 --- a/src/worker.c +++ b/src/worker.c @@ -20,13 +20,29 @@ #include #include -int worker_create(struct worker *worker, const struct settings *settings) +struct worker { + int fd; + + pthread_mutex_t task_mtx; + pthread_t task; + int task_active; +}; + +int worker_create(struct worker **_worker, const struct settings *settings) { + struct worker *worker; int ret = 0; + *_worker = malloc(sizeof(struct worker)); + if (!*_worker) { + log_errno("malloc"); + return -1; + } + worker = *_worker; + ret = libgit_init(); if (ret < 0) - return ret; + goto free; ret = net_connect(settings->host, settings->port); if (ret < 0) @@ -38,6 +54,9 @@ int worker_create(struct worker *worker, const struct settings *settings) git_shutdown: libgit_shutdown(); +free: + free(worker); + return ret; } @@ -47,6 +66,7 @@ void worker_destroy(struct worker *worker) log_errno_if(close(worker->fd), "close"); libgit_shutdown(); + free(worker); } static int msg_send_new_worker(const struct worker *worker) diff --git a/src/worker.h b/src/worker.h index 0bf3e80..246fd43 100644 --- a/src/worker.h +++ b/src/worker.h @@ -15,15 +15,9 @@ struct settings { char *port; }; -struct worker { - int fd; +struct worker; - pthread_mutex_t task_mtx; - pthread_t task; - int task_active; -}; - -int worker_create(struct worker *, const struct settings *); +int worker_create(struct worker **, const struct settings *); void worker_destroy(struct worker *); int worker_main(struct worker *, int argc, char *argv[]); diff --git a/src/worker_main.c b/src/worker_main.c index 7451861..7c78f93 100644 --- a/src/worker_main.c +++ b/src/worker_main.c @@ -72,7 +72,7 @@ static int parse_settings(struct settings *settings, int argc, char *argv[]) int main(int argc, char *argv[]) { struct settings settings; - struct worker worker; + struct worker *worker; int ret = 0; ret = parse_settings(&settings, argc, argv); @@ -83,12 +83,12 @@ int main(int argc, char *argv[]) if (ret < 0) return ret; - ret = worker_main(&worker, argc - optind, argv + optind); + ret = worker_main(worker, argc - optind, argv + optind); if (ret < 0) goto destroy_worker; destroy_worker: - worker_destroy(&worker); + worker_destroy(worker); return ret; } -- cgit v1.2.3