diff options
| author | Dimitri Staessens <dimitri@ouroboros.rocks> | 2022-03-06 20:58:48 +0100 | 
|---|---|---|
| committer | Sander Vrijders <sander@ouroboros.rocks> | 2022-03-08 17:40:18 +0100 | 
| commit | 2db119dd5c3e9a1ffc1360bde181a030c08bfce2 (patch) | |
| tree | eeca421da0fc74b20e169e40b46850987befeb11 /src/ipcpd/unicast/dir | |
| parent | 7e4e488f00f60fe3a0241c42d0034e1a7617e1bd (diff) | |
| download | ouroboros-2db119dd5c3e9a1ffc1360bde181a030c08bfce2.tar.gz ouroboros-2db119dd5c3e9a1ffc1360bde181a030c08bfce2.zip | |
ipcpd: Refactor kad_req_create
A small refactor of the kad_req_create function's cleanup code.
Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks>
Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'src/ipcpd/unicast/dir')
| -rw-r--r-- | src/ipcpd/unicast/dir/dht.c | 45 | 
1 files changed, 25 insertions, 20 deletions
| diff --git a/src/ipcpd/unicast/dir/dht.c b/src/ipcpd/unicast/dir/dht.c index 572010b7..a847edc0 100644 --- a/src/ipcpd/unicast/dir/dht.c +++ b/src/ipcpd/unicast/dir/dht.c @@ -361,14 +361,14 @@ static void kad_req_create(struct dht * dht,          struct timespec    t;          size_t             b; +        clock_gettime(CLOCK_REALTIME_COARSE, &t); +          req = malloc(sizeof(*req));          if (req == NULL) -                return; +                goto fail_malloc;          list_head_init(&req->next); -        clock_gettime(CLOCK_REALTIME_COARSE, &t); -          req->t_exp  = t.tv_sec + KAD_T_RESP;          req->addr   = addr;          req->state  = REQ_INIT; @@ -382,30 +382,22 @@ static void kad_req_create(struct dht * dht,          if (msg->has_key) {                  req->key = dht_dup_key(msg->key.data, b); -                if (req->key == NULL) { -                        free(req); -                        return; -                } +                if (req->key == NULL) +                        goto fail_dup_key;          } -        if (pthread_mutex_init(&req->lock, NULL)) { -                free(req->key); -                free(req); -                return; -        } +        if (pthread_mutex_init(&req->lock, NULL)) +                goto fail_mutex; -        pthread_condattr_init(&cattr); + +        if (pthread_condattr_init(&cattr)) +                goto fail_condattr;  #ifndef __APPLE__          pthread_condattr_setclock(&cattr, PTHREAD_COND_CLOCK);  #endif -        if (pthread_cond_init(&req->cond, &cattr)) { -                pthread_condattr_destroy(&cattr); -                pthread_mutex_destroy(&req->lock); -                free(req->key); -                free(req); -                return; -        } +        if (pthread_cond_init(&req->cond, &cattr)) +                goto fail_cond_init;          pthread_condattr_destroy(&cattr); @@ -414,6 +406,19 @@ static void kad_req_create(struct dht * dht,          list_add(&req->next, &dht->requests);          pthread_rwlock_unlock(&dht->lock); + +        return; + + fail_cond_init: +        pthread_condattr_destroy(&cattr); + fail_condattr: +        pthread_mutex_destroy(&req->lock); + fail_mutex: +        free(req->key); + fail_dup_key: +        free(req); + fail_malloc: +        return;  }  static void cancel_req_destroy(void * o) | 
