diff options
author | Dimitri Staessens <dimitri@ouroboros.rocks> | 2021-06-21 20:24:03 +0200 |
---|---|---|
committer | Sander Vrijders <sander@ouroboros.rocks> | 2021-06-23 08:36:48 +0200 |
commit | 8ca960fa0274018cb4f94a1826029d74e6f762e0 (patch) | |
tree | 268ffb6b24027d65c738a8edd196a1ed52134fcc /include | |
parent | ac53f8ea09b9a24321bc2c00832ba8a117115134 (diff) | |
download | ouroboros-8ca960fa0274018cb4f94a1826029d74e6f762e0.tar.gz ouroboros-8ca960fa0274018cb4f94a1826029d74e6f762e0.zip |
lib, ipcpd, irmd: Wrap pthread unlocks for cleanup
This add an ouroboros/pthread.h header that wraps the
pthread_..._unlock() functions for cleanup using
pthread_cleanup_push() as this casting is not safe (and there were
definitely bad casts in the code). The close() function is now also
wrapped for cleanup in ouroboros/sockets.h.
This allows enabling more compiler checks.
Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks>
Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'include')
-rw-r--r-- | include/ouroboros/pthread.h | 39 | ||||
-rw-r--r-- | include/ouroboros/sockets.h.in | 3 |
2 files changed, 42 insertions, 0 deletions
diff --git a/include/ouroboros/pthread.h b/include/ouroboros/pthread.h new file mode 100644 index 00000000..735557d2 --- /dev/null +++ b/include/ouroboros/pthread.h @@ -0,0 +1,39 @@ +/* + * Ouroboros - Copyright (C) 2016 - 2021 + * + * Useful cleanup functions for pthreads + * + * Dimitri Staessens <dimitri@ouroboros.rocks> + * Sander Vrijders <sander@ouroboros.rocks> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., http://www.fsf.org/about/contact/. + */ + +#ifndef OUROBOROS_PTHREAD_H +#define OUROBOROS_PTHREAD_H + +#include <pthread.h> + +/* various cleanup functions for pthread_cleanup_push */ +static void __attribute__((unused)) __cleanup_rwlock_unlock(void * rwlock) +{ + pthread_rwlock_unlock((pthread_rwlock_t *) rwlock); +} + +static void __attribute__((unused)) __cleanup_mutex_unlock(void * mutex) +{ + pthread_mutex_unlock((pthread_mutex_t *) mutex); +} + +#endif /* OUROBOROS_PTHREAD_H */ diff --git a/include/ouroboros/sockets.h.in b/include/ouroboros/sockets.h.in index 857b1353..f1162163 100644 --- a/include/ouroboros/sockets.h.in +++ b/include/ouroboros/sockets.h.in @@ -65,4 +65,7 @@ qosspec_msg_t spec_to_msg(const qosspec_t * qs); qosspec_t msg_to_spec(const qosspec_msg_t * msg); +/* cleanup socket when cancelling thread */ +void __cleanup_close_ptr(void * o); + #endif |