diff options
Diffstat (limited to 'src')
50 files changed, 337 insertions, 347 deletions
diff --git a/src/charon/bus/bus.c b/src/charon/bus/bus.c index c2184234b..d77797e92 100644 --- a/src/charon/bus/bus.c +++ b/src/charon/bus/bus.c @@ -19,7 +19,7 @@ #include <stdint.h> #include <daemon.h> -#include <threading.h> +#include <threading/mutex.h> ENUM(debug_names, DBG_DMN, DBG_LIB, "DMN", diff --git a/src/charon/config/backend_manager.c b/src/charon/config/backend_manager.c index dabae342c..938927cd4 100644 --- a/src/charon/config/backend_manager.c +++ b/src/charon/config/backend_manager.c @@ -20,7 +20,7 @@ #include <daemon.h> #include <utils/linked_list.h> -#include <threading.h> +#include <threading/rwlock.h> typedef struct private_backend_manager_t private_backend_manager_t; diff --git a/src/charon/config/peer_cfg.c b/src/charon/config/peer_cfg.c index cf5d00621..9df14c9ae 100644 --- a/src/charon/config/peer_cfg.c +++ b/src/charon/config/peer_cfg.c @@ -21,7 +21,7 @@ #include <daemon.h> -#include <threading.h> +#include <threading/mutex.h> #include <utils/linked_list.h> #include <utils/identification.h> diff --git a/src/charon/credentials/credential_manager.c b/src/charon/credentials/credential_manager.c index 36d634c03..1e851779c 100644 --- a/src/charon/credentials/credential_manager.c +++ b/src/charon/credentials/credential_manager.c @@ -18,7 +18,7 @@ #include "credential_manager.h" #include <daemon.h> -#include <threading.h> +#include <threading/rwlock.h> #include <utils/linked_list.h> #include <credentials/sets/cert_cache.h> #include <credentials/sets/auth_cfg_wrapper.h> @@ -1140,7 +1140,7 @@ static bool verify_trust_chain(private_credential_manager_t *this, { auth->add(auth, AUTH_RULE_CA_CERT, issuer->get_ref(issuer)); DBG1(DBG_CFG, " using trusted ca certificate \"%Y\"", - issuer->get_subject(issuer)); + issuer->get_subject(issuer)); trusted = TRUE; } else diff --git a/src/charon/credentials/sets/cert_cache.c b/src/charon/credentials/sets/cert_cache.c index 037f102fd..176accce2 100644 --- a/src/charon/credentials/sets/cert_cache.c +++ b/src/charon/credentials/sets/cert_cache.c @@ -19,7 +19,7 @@ #include <sched.h> #include <daemon.h> -#include <threading.h> +#include <threading/rwlock.h> #include <utils/linked_list.h> /** cache size, a power of 2 for fast modulo */ diff --git a/src/charon/network/sender.c b/src/charon/network/sender.c index dc7b0624e..c644f1d41 100644 --- a/src/charon/network/sender.c +++ b/src/charon/network/sender.c @@ -22,7 +22,7 @@ #include <daemon.h> #include <network/socket.h> #include <processing/jobs/callback_job.h> -#include <threading.h> +#include <threading/mutex.h> typedef struct private_sender_t private_sender_t; diff --git a/src/charon/plugins/eap_radius/radius_client.c b/src/charon/plugins/eap_radius/radius_client.c index 5d4779c65..e6d68c920 100644 --- a/src/charon/plugins/eap_radius/radius_client.c +++ b/src/charon/plugins/eap_radius/radius_client.c @@ -21,7 +21,7 @@ #include <daemon.h> #include <utils/host.h> #include <utils/linked_list.h> -#include <threading.h> +#include <threading/mutex.h> /** * Default RADIUS server port, when not configured diff --git a/src/charon/plugins/eap_sim_file/eap_sim_file_triplets.c b/src/charon/plugins/eap_sim_file/eap_sim_file_triplets.c index cda0c0ff4..6b7d99fb7 100644 --- a/src/charon/plugins/eap_sim_file/eap_sim_file_triplets.c +++ b/src/charon/plugins/eap_sim_file/eap_sim_file_triplets.c @@ -20,7 +20,7 @@ #include <daemon.h> #include <utils/linked_list.h> -#include <threading.h> +#include <threading/mutex.h> typedef struct private_eap_sim_file_triplets_t private_eap_sim_file_triplets_t; diff --git a/src/charon/plugins/kernel_klips/kernel_klips_ipsec.c b/src/charon/plugins/kernel_klips/kernel_klips_ipsec.c index dfa79f4d7..29a77de8b 100644 --- a/src/charon/plugins/kernel_klips/kernel_klips_ipsec.c +++ b/src/charon/plugins/kernel_klips/kernel_klips_ipsec.c @@ -30,7 +30,7 @@ #include "kernel_klips_ipsec.h" #include <daemon.h> -#include <threading.h> +#include <threading/mutex.h> #include <processing/jobs/callback_job.h> #include <processing/jobs/acquire_job.h> #include <processing/jobs/rekey_child_sa_job.h> diff --git a/src/charon/plugins/kernel_netlink/kernel_netlink_ipsec.c b/src/charon/plugins/kernel_netlink/kernel_netlink_ipsec.c index 691bab791..c7f005a32 100644 --- a/src/charon/plugins/kernel_netlink/kernel_netlink_ipsec.c +++ b/src/charon/plugins/kernel_netlink/kernel_netlink_ipsec.c @@ -36,7 +36,7 @@ #include "kernel_netlink_shared.h" #include <daemon.h> -#include <threading.h> +#include <threading/mutex.h> #include <utils/hashtable.h> #include <processing/jobs/callback_job.h> #include <processing/jobs/acquire_job.h> diff --git a/src/charon/plugins/kernel_netlink/kernel_netlink_net.c b/src/charon/plugins/kernel_netlink/kernel_netlink_net.c index 67e7c820f..4447dc096 100644 --- a/src/charon/plugins/kernel_netlink/kernel_netlink_net.c +++ b/src/charon/plugins/kernel_netlink/kernel_netlink_net.c @@ -26,7 +26,7 @@ #include "kernel_netlink_shared.h" #include <daemon.h> -#include <threading.h> +#include <threading/mutex.h> #include <utils/linked_list.h> #include <processing/jobs/callback_job.h> #include <processing/jobs/roam_job.h> diff --git a/src/charon/plugins/kernel_netlink/kernel_netlink_shared.c b/src/charon/plugins/kernel_netlink/kernel_netlink_shared.c index e4bdbb1c5..b96186a3a 100644 --- a/src/charon/plugins/kernel_netlink/kernel_netlink_shared.c +++ b/src/charon/plugins/kernel_netlink/kernel_netlink_shared.c @@ -22,7 +22,7 @@ #include "kernel_netlink_shared.h" #include <daemon.h> -#include <threading.h> +#include <threading/mutex.h> typedef struct private_netlink_socket_t private_netlink_socket_t; diff --git a/src/charon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c b/src/charon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c index 98f7a5792..8dc03b80b 100644 --- a/src/charon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c +++ b/src/charon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c @@ -56,7 +56,7 @@ #include <daemon.h> #include <utils/host.h> -#include <threading.h> +#include <threading/mutex.h> #include <processing/jobs/callback_job.h> #include <processing/jobs/acquire_job.h> #include <processing/jobs/migrate_job.h> diff --git a/src/charon/plugins/kernel_pfroute/kernel_pfroute_net.c b/src/charon/plugins/kernel_pfroute/kernel_pfroute_net.c index 814fbad83..9aee53928 100644 --- a/src/charon/plugins/kernel_pfroute/kernel_pfroute_net.c +++ b/src/charon/plugins/kernel_pfroute/kernel_pfroute_net.c @@ -26,7 +26,7 @@ #include <daemon.h> #include <utils/host.h> -#include <threading.h> +#include <threading/mutex.h> #include <utils/linked_list.h> #include <processing/jobs/callback_job.h> #include <processing/jobs/roam_job.h> diff --git a/src/charon/plugins/load_tester/load_tester_plugin.c b/src/charon/plugins/load_tester/load_tester_plugin.c index de721e05d..9c6cc9974 100644 --- a/src/charon/plugins/load_tester/load_tester_plugin.c +++ b/src/charon/plugins/load_tester/load_tester_plugin.c @@ -24,7 +24,7 @@ #include <daemon.h> #include <processing/jobs/callback_job.h> -#include <threading.h> +#include <threading/mutex.h> typedef struct private_load_tester_plugin_t private_load_tester_plugin_t; diff --git a/src/charon/plugins/nm/nm_creds.c b/src/charon/plugins/nm/nm_creds.c index 68ef61fce..193838e6b 100644 --- a/src/charon/plugins/nm/nm_creds.c +++ b/src/charon/plugins/nm/nm_creds.c @@ -20,7 +20,7 @@ #include <unistd.h> #include <daemon.h> -#include <threading.h> +#include <threading/rwlock.h> #include <credentials/certificates/x509.h> typedef struct private_nm_creds_t private_nm_creds_t; diff --git a/src/charon/plugins/resolve/resolve_handler.c b/src/charon/plugins/resolve/resolve_handler.c index 7f7e02474..714c751a6 100644 --- a/src/charon/plugins/resolve/resolve_handler.c +++ b/src/charon/plugins/resolve/resolve_handler.c @@ -18,7 +18,7 @@ #include <unistd.h> #include <daemon.h> -#include <threading.h> +#include <threading/mutex.h> typedef struct private_resolve_handler_t private_resolve_handler_t; diff --git a/src/charon/plugins/stroke/stroke_attribute.c b/src/charon/plugins/stroke/stroke_attribute.c index d01352823..7a5ce683e 100644 --- a/src/charon/plugins/stroke/stroke_attribute.c +++ b/src/charon/plugins/stroke/stroke_attribute.c @@ -18,7 +18,7 @@ #include <daemon.h> #include <utils/linked_list.h> #include <utils/hashtable.h> -#include <threading.h> +#include <threading/mutex.h> #define POOL_LIMIT (sizeof(uintptr_t)*8) diff --git a/src/charon/plugins/stroke/stroke_ca.c b/src/charon/plugins/stroke/stroke_ca.c index ebcd9ac3b..49146f18b 100644 --- a/src/charon/plugins/stroke/stroke_ca.c +++ b/src/charon/plugins/stroke/stroke_ca.c @@ -17,7 +17,7 @@ #include "stroke_ca.h" #include "stroke_cred.h" -#include <threading.h> +#include <threading/rwlock.h> #include <utils/linked_list.h> #include <crypto/hashers/hasher.h> diff --git a/src/charon/plugins/stroke/stroke_config.c b/src/charon/plugins/stroke/stroke_config.c index c03349ac9..1f585f72b 100644 --- a/src/charon/plugins/stroke/stroke_config.c +++ b/src/charon/plugins/stroke/stroke_config.c @@ -16,7 +16,7 @@ #include "stroke_config.h" #include <daemon.h> -#include <threading.h> +#include <threading/mutex.h> #include <utils/lexparser.h> typedef struct private_stroke_config_t private_stroke_config_t; diff --git a/src/charon/plugins/stroke/stroke_cred.c b/src/charon/plugins/stroke/stroke_cred.c index 91830985a..bc0b2f6fc 100644 --- a/src/charon/plugins/stroke/stroke_cred.c +++ b/src/charon/plugins/stroke/stroke_cred.c @@ -27,7 +27,7 @@ #include <credentials/certificates/ac.h> #include <utils/linked_list.h> #include <utils/lexparser.h> -#include <threading.h> +#include <threading/rwlock.h> #include <daemon.h> /* configuration directories and files */ diff --git a/src/charon/plugins/stroke/stroke_socket.c b/src/charon/plugins/stroke/stroke_socket.c index f834f8e15..6a599992e 100644 --- a/src/charon/plugins/stroke/stroke_socket.c +++ b/src/charon/plugins/stroke/stroke_socket.c @@ -27,7 +27,7 @@ #include <processing/jobs/callback_job.h> #include <daemon.h> -#include <threading.h> /* for Mac OS X compatible accept */ +#include <threading/mutex.h> /* for Mac OS X compatible accept */ #include "stroke_config.h" #include "stroke_control.h" diff --git a/src/charon/plugins/unit_tester/tests/test_mutex.c b/src/charon/plugins/unit_tester/tests/test_mutex.c index 900b65215..77085cb2f 100644 --- a/src/charon/plugins/unit_tester/tests/test_mutex.c +++ b/src/charon/plugins/unit_tester/tests/test_mutex.c @@ -14,7 +14,7 @@ */ #include <library.h> -#include <threading.h> +#include <threading/mutex.h> #include <unistd.h> #include <sched.h> diff --git a/src/charon/processing/jobs/callback_job.c b/src/charon/processing/jobs/callback_job.c index e4299af6b..145481c0b 100644 --- a/src/charon/processing/jobs/callback_job.c +++ b/src/charon/processing/jobs/callback_job.c @@ -18,7 +18,7 @@ #include <pthread.h> #include <daemon.h> -#include <threading.h> +#include <threading/mutex.h> typedef struct private_callback_job_t private_callback_job_t; diff --git a/src/charon/processing/processor.c b/src/charon/processing/processor.c index 248bba145..620c01c9c 100644 --- a/src/charon/processing/processor.c +++ b/src/charon/processing/processor.c @@ -22,7 +22,7 @@ #include "processor.h" #include <daemon.h> -#include <threading.h> +#include <threading/mutex.h> #include <utils/linked_list.h> diff --git a/src/charon/processing/scheduler.c b/src/charon/processing/scheduler.c index 36ccb1468..69c54900c 100644 --- a/src/charon/processing/scheduler.c +++ b/src/charon/processing/scheduler.c @@ -23,7 +23,7 @@ #include <daemon.h> #include <processing/processor.h> #include <processing/jobs/callback_job.h> -#include <threading.h> +#include <threading/mutex.h> /* the initial size of the heap */ #define HEAP_SIZE_DEFAULT 64 diff --git a/src/charon/sa/authenticators/eap/eap_manager.c b/src/charon/sa/authenticators/eap/eap_manager.c index 3738cb948..f795183f0 100644 --- a/src/charon/sa/authenticators/eap/eap_manager.c +++ b/src/charon/sa/authenticators/eap/eap_manager.c @@ -16,7 +16,7 @@ #include "eap_manager.h" #include <utils/linked_list.h> -#include <threading.h> +#include <threading/rwlock.h> typedef struct private_eap_manager_t private_eap_manager_t; typedef struct eap_entry_t eap_entry_t; diff --git a/src/charon/sa/connect_manager.c b/src/charon/sa/connect_manager.c index e26c6c60c..b78ba070d 100644 --- a/src/charon/sa/connect_manager.c +++ b/src/charon/sa/connect_manager.c @@ -18,7 +18,7 @@ #include <math.h> #include <daemon.h> -#include <threading.h> +#include <threading/mutex.h> #include <utils/linked_list.h> #include <crypto/hashers/hasher.h> diff --git a/src/charon/sa/ike_sa_manager.c b/src/charon/sa/ike_sa_manager.c index bb8a4e0ab..6eb9d14bb 100644 --- a/src/charon/sa/ike_sa_manager.c +++ b/src/charon/sa/ike_sa_manager.c @@ -22,7 +22,8 @@ #include <daemon.h> #include <sa/ike_sa_id.h> #include <bus/bus.h> -#include <threading.h> +#include <threading/mutex.h> +#include <threading/rwlock.h> #include <utils/linked_list.h> #include <crypto/hashers/hasher.h> diff --git a/src/charon/sa/mediation_manager.c b/src/charon/sa/mediation_manager.c index 5161a7147..035f49053 100644 --- a/src/charon/sa/mediation_manager.c +++ b/src/charon/sa/mediation_manager.c @@ -16,7 +16,7 @@ #include "mediation_manager.h" #include <daemon.h> -#include <threading.h> +#include <threading/mutex.h> #include <utils/linked_list.h> #include <processing/jobs/mediation_job.h> diff --git a/src/charon/sa/trap_manager.c b/src/charon/sa/trap_manager.c index edcba3a8b..ed758995a 100644 --- a/src/charon/sa/trap_manager.c +++ b/src/charon/sa/trap_manager.c @@ -16,7 +16,7 @@ #include "trap_manager.h" #include <daemon.h> -#include <threading.h> +#include <threading/rwlock.h> #include <utils/linked_list.h> diff --git a/src/libfast/dispatcher.c b/src/libfast/dispatcher.c index a4d23bf7b..05c11224b 100644 --- a/src/libfast/dispatcher.c +++ b/src/libfast/dispatcher.c @@ -24,7 +24,7 @@ #include <unistd.h> #include <debug.h> -#include <threading.h> +#include <threading/mutex.h> #include <utils/linked_list.h> #include <utils/hashtable.h> diff --git a/src/libstrongswan/Makefile.am b/src/libstrongswan/Makefile.am index bdb6cdadc..d708eb933 100644 --- a/src/libstrongswan/Makefile.am +++ b/src/libstrongswan/Makefile.am @@ -43,7 +43,6 @@ credentials/ietf_attributes/ietf_attributes.c credentials/ietf_attributes/ietf_a database/database.h database/database_factory.h database/database_factory.c \ fetcher/fetcher.h fetcher/fetcher_manager.h fetcher/fetcher_manager.c \ selectors/traffic_selector.c selectors/traffic_selector.h \ -threading.h \ threading/mutex.h threading/mutex.c \ threading/condvar.h threading/condvar.c \ threading/rwlock.h threading/rwlock.c \ diff --git a/src/libstrongswan/attributes/attribute_manager.c b/src/libstrongswan/attributes/attribute_manager.c index 4b0c50921..91fa1ebb5 100644 --- a/src/libstrongswan/attributes/attribute_manager.c +++ b/src/libstrongswan/attributes/attribute_manager.c @@ -17,7 +17,7 @@ #include <debug.h> #include <utils/linked_list.h> -#include <threading.h> +#include <threading/rwlock.h> typedef struct private_attribute_manager_t private_attribute_manager_t; diff --git a/src/libstrongswan/credentials/credential_factory.c b/src/libstrongswan/credentials/credential_factory.c index 7e94b9d14..ff2393f69 100644 --- a/src/libstrongswan/credentials/credential_factory.c +++ b/src/libstrongswan/credentials/credential_factory.c @@ -20,7 +20,7 @@ #include <debug.h> #include <utils/linked_list.h> -#include <threading.h> +#include <threading/rwlock.h> #include <credentials/certificates/x509.h> ENUM(credential_type_names, CRED_PRIVATE_KEY, CRED_CERTIFICATE, diff --git a/src/libstrongswan/credentials/keys/key_encoding.c b/src/libstrongswan/credentials/keys/key_encoding.c index b9bd89f60..89b25226c 100644 --- a/src/libstrongswan/credentials/keys/key_encoding.c +++ b/src/libstrongswan/credentials/keys/key_encoding.c @@ -19,7 +19,7 @@ #include <utils/linked_list.h> #include <utils/hashtable.h> -#include <threading.h> +#include <threading/rwlock.h> typedef struct private_key_encoding_t private_key_encoding_t; diff --git a/src/libstrongswan/crypto/crypto_factory.c b/src/libstrongswan/crypto/crypto_factory.c index 218108646..46b50329d 100644 --- a/src/libstrongswan/crypto/crypto_factory.c +++ b/src/libstrongswan/crypto/crypto_factory.c @@ -16,7 +16,7 @@ #include "crypto_factory.h" #include <debug.h> -#include <threading.h> +#include <threading/rwlock.h> #include <utils/linked_list.h> #include <crypto/crypto_tester.h> diff --git a/src/libstrongswan/database/database_factory.c b/src/libstrongswan/database/database_factory.c index a0f50c80c..3936565a1 100644 --- a/src/libstrongswan/database/database_factory.c +++ b/src/libstrongswan/database/database_factory.c @@ -16,7 +16,7 @@ #include "database_factory.h" #include <utils/linked_list.h> -#include <threading.h> +#include <threading/mutex.h> typedef struct private_database_factory_t private_database_factory_t; diff --git a/src/libstrongswan/fetcher/fetcher_manager.c b/src/libstrongswan/fetcher/fetcher_manager.c index fd3b0eef9..b73bfacf6 100644 --- a/src/libstrongswan/fetcher/fetcher_manager.c +++ b/src/libstrongswan/fetcher/fetcher_manager.c @@ -16,7 +16,7 @@ #include "fetcher_manager.h" #include <debug.h> -#include <threading.h> +#include <threading/rwlock.h> #include <utils/linked_list.h> typedef struct private_fetcher_manager_t private_fetcher_manager_t; diff --git a/src/libstrongswan/plugins/gcrypt/gcrypt_plugin.c b/src/libstrongswan/plugins/gcrypt/gcrypt_plugin.c index 66481da38..8c9ea893b 100644 --- a/src/libstrongswan/plugins/gcrypt/gcrypt_plugin.c +++ b/src/libstrongswan/plugins/gcrypt/gcrypt_plugin.c @@ -24,7 +24,7 @@ #include <library.h> #include <debug.h> -#include <threading.h> +#include <threading/mutex.h> #include <errno.h> #include <gcrypt.h> diff --git a/src/libstrongswan/plugins/mysql/mysql_database.c b/src/libstrongswan/plugins/mysql/mysql_database.c index f01321fb5..6c2a25b50 100644 --- a/src/libstrongswan/plugins/mysql/mysql_database.c +++ b/src/libstrongswan/plugins/mysql/mysql_database.c @@ -21,7 +21,7 @@ #include "mysql_database.h" #include <debug.h> -#include <threading.h> +#include <threading/mutex.h> #include <utils/linked_list.h> /* Older mysql.h headers do not define it, but we need it. It is not returned diff --git a/src/libstrongswan/plugins/openssl/openssl_plugin.c b/src/libstrongswan/plugins/openssl/openssl_plugin.c index 0cb526d89..46446fc25 100644 --- a/src/libstrongswan/plugins/openssl/openssl_plugin.c +++ b/src/libstrongswan/plugins/openssl/openssl_plugin.c @@ -23,7 +23,7 @@ #include "openssl_plugin.h" #include <library.h> -#include <threading.h> +#include <threading/mutex.h> #include "openssl_util.h" #include "openssl_crypter.h" #include "openssl_hasher.h" diff --git a/src/libstrongswan/plugins/sqlite/sqlite_database.c b/src/libstrongswan/plugins/sqlite/sqlite_database.c index afe67f62a..721f1a126 100644 --- a/src/libstrongswan/plugins/sqlite/sqlite_database.c +++ b/src/libstrongswan/plugins/sqlite/sqlite_database.c @@ -19,7 +19,7 @@ #include <unistd.h> #include <library.h> #include <debug.h> -#include <threading.h> +#include <threading/mutex.h> typedef struct private_sqlite_database_t private_sqlite_database_t; diff --git a/src/libstrongswan/threading.h b/src/libstrongswan/threading.h deleted file mode 100644 index 8b9f37fab..000000000 --- a/src/libstrongswan/threading.h +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Copyright (C) 2008-2009 Tobias Brunner - * Copyright (C) 2008 Martin Willi - * Hochschule fuer Technik Rapperswil - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. - * - * This program 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 General Public License - * for more details. - */ - -/** - * @defgroup threading threading - * @{ @ingroup libstrongswan - */ - -#ifndef THREADING_H_ -#define THREADING_H_ - -typedef struct mutex_t mutex_t; -typedef struct condvar_t condvar_t; -typedef struct rwlock_t rwlock_t; -typedef enum mutex_type_t mutex_type_t; -typedef enum condvar_type_t condvar_type_t; -typedef enum rwlock_type_t rwlock_type_t; - -#include <library.h> - -#ifdef __APPLE__ -/* on Mac OS X 10.5 several system calls we use are no cancellation points. - * fortunately, select isn't one of them, so we wrap some of the others with - * calls to select(2). - */ -#include <sys/socket.h> -#include <sys/select.h> - -#define WRAP_WITH_SELECT(func, socket, ...)\ - fd_set rfds; FD_ZERO(&rfds); FD_SET(socket, &rfds);\ - if (select(socket + 1, &rfds, NULL, NULL, NULL) <= 0) { return -1; }\ - return func(socket, __VA_ARGS__) - -static inline int cancellable_accept(int socket, struct sockaddr *address, - socklen_t *address_len) -{ - WRAP_WITH_SELECT(accept, socket, address, address_len); -} -#define accept cancellable_accept -static inline int cancellable_recvfrom(int socket, void *buffer, size_t length, - int flags, struct sockaddr *address, socklen_t *address_len) -{ - WRAP_WITH_SELECT(recvfrom, socket, buffer, length, flags, address, address_len); -} -#define recvfrom cancellable_recvfrom -#endif /* __APPLE__ */ - -/** - * Type of mutex. - */ -enum mutex_type_t { - /** default mutex */ - MUTEX_TYPE_DEFAULT = 0, - /** allow recursive locking of the mutex */ - MUTEX_TYPE_RECURSIVE = 1, -}; - -/** - * Type of condvar. - */ -enum condvar_type_t { - /** default condvar */ - CONDVAR_TYPE_DEFAULT = 0, -}; - -/** - * Type of read-write lock. - */ -enum rwlock_type_t { - /** default condvar */ - RWLOCK_TYPE_DEFAULT = 0, -}; - -/** - * Mutex wrapper implements simple, portable and advanced mutex functions. - */ -struct mutex_t { - - /** - * Acquire the lock to the mutex. - */ - void (*lock)(mutex_t *this); - - /** - * Release the lock on the mutex. - */ - void (*unlock)(mutex_t *this); - - /** - * Destroy a mutex instance. - */ - void (*destroy)(mutex_t *this); -}; - -/** - * Condvar wrapper to use in conjunction with mutex_t. - */ -struct condvar_t { - - /** - * Wait on a condvar until it gets signalized. - * - * @param mutex mutex to release while waiting - */ - void (*wait)(condvar_t *this, mutex_t *mutex); - - /** - * Wait on a condvar until it gets signalized, or times out. - * - * @param mutex mutex to release while waiting - * @param timeout timeout im ms - * @return TRUE if timed out, FALSE otherwise - */ - bool (*timed_wait)(condvar_t *this, mutex_t *mutex, u_int timeout); - - /** - * Wait on a condvar until it gets signalized, or times out. - * - * The passed timeval should be calculated based on the time_monotonic() - * function. - * - * @param mutex mutex to release while waiting - * @param tv absolute time until timeout - * @return TRUE if timed out, FALSE otherwise - */ - bool (*timed_wait_abs)(condvar_t *this, mutex_t *mutex, timeval_t tv); - - /** - * Wake up a single thread in a condvar. - */ - void (*signal)(condvar_t *this); - - /** - * Wake up all threads in a condvar. - */ - void (*broadcast)(condvar_t *this); - - /** - * Destroy a condvar and free its resources. - */ - void (*destroy)(condvar_t *this); -}; - -/** - * Read-Write lock wrapper. - */ -struct rwlock_t { - - /** - * Acquire the read lock. - */ - void (*read_lock)(rwlock_t *this); - - /** - * Acquire the write lock. - */ - void (*write_lock)(rwlock_t *this); - - /** - * Try to acquire the write lock. - * - * Never blocks, but returns FALSE if the lock was already occupied. - * - * @return TRUE if lock acquired - */ - bool (*try_write_lock)(rwlock_t *this); - - /** - * Release any acquired lock. - */ - void (*unlock)(rwlock_t *this); - - /** - * Destroy the read-write lock. - */ - void (*destroy)(rwlock_t *this); -}; - -/** - * Create a mutex instance. - * - * @param type type of mutex to create - * @return unlocked mutex instance - */ -mutex_t *mutex_create(mutex_type_t type); - -/** - * Create a condvar instance. - * - * @param type type of condvar to create - * @return condvar instance - */ -condvar_t *condvar_create(condvar_type_t type); - -/** - * Create a read-write lock instance. - * - * @param type type of rwlock to create - * @return unlocked rwlock instance - */ -rwlock_t *rwlock_create(rwlock_type_t type); - -#endif /** THREADING_H_ @}*/ diff --git a/src/libstrongswan/threading/condvar.c b/src/libstrongswan/threading/condvar.c index 7ba1c07ec..4c9589081 100644 --- a/src/libstrongswan/threading/condvar.c +++ b/src/libstrongswan/threading/condvar.c @@ -20,13 +20,30 @@ #include <time.h> #include <errno.h> -#include <threading.h> #include <library.h> #include <debug.h> #include "condvar.h" #include "mutex.h" +typedef struct private_condvar_t private_condvar_t; + +/** + * private data of condvar + */ +struct private_condvar_t { + + /** + * public functions + */ + condvar_t public; + + /** + * wrapped pthread condvar + */ + pthread_cond_t condvar; +}; + /** * Implementation of condvar_t.wait. */ diff --git a/src/libstrongswan/threading/condvar.h b/src/libstrongswan/threading/condvar.h index 9b2966253..48c949c7c 100644 --- a/src/libstrongswan/threading/condvar.h +++ b/src/libstrongswan/threading/condvar.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008 Tobias Brunner + * Copyright (C) 2008-2009 Tobias Brunner * Copyright (C) 2008 Martin Willi * Hochschule fuer Technik Rapperswil * @@ -14,26 +14,83 @@ * for more details. */ +/** + * @defgroup condvar condvar + * @{ @ingroup threading + */ + #ifndef THREADING_CONDVAR_H_ #define THREADING_CONDVAR_H_ -typedef struct private_condvar_t private_condvar_t; +typedef struct condvar_t condvar_t; +typedef enum condvar_type_t condvar_type_t; + +#include "mutex.h" + +/** + * Type of condvar. + */ +enum condvar_type_t { + /** default condvar */ + CONDVAR_TYPE_DEFAULT = 0, +}; /** - * private data of condvar + * Condvar wrapper to use in conjunction with mutex_t. */ -struct private_condvar_t { +struct condvar_t { + + /** + * Wait on a condvar until it gets signalized. + * + * @param mutex mutex to release while waiting + */ + void (*wait)(condvar_t *this, mutex_t *mutex); + + /** + * Wait on a condvar until it gets signalized, or times out. + * + * @param mutex mutex to release while waiting + * @param timeout timeout im ms + * @return TRUE if timed out, FALSE otherwise + */ + bool (*timed_wait)(condvar_t *this, mutex_t *mutex, u_int timeout); + + /** + * Wait on a condvar until it gets signalized, or times out. + * + * The passed timeval should be calculated based on the time_monotonic() + * function. + * + * @param mutex mutex to release while waiting + * @param tv absolute time until timeout + * @return TRUE if timed out, FALSE otherwise + */ + bool (*timed_wait_abs)(condvar_t *this, mutex_t *mutex, timeval_t tv); + + /** + * Wake up a single thread in a condvar. + */ + void (*signal)(condvar_t *this); /** - * public functions + * Wake up all threads in a condvar. */ - condvar_t public; + void (*broadcast)(condvar_t *this); /** - * wrapped pthread condvar + * Destroy a condvar and free its resources. */ - pthread_cond_t condvar; + void (*destroy)(condvar_t *this); }; -#endif /* THREADING_CONDVAR_H_ */ +/** + * Create a condvar instance. + * + * @param type type of condvar to create + * @return condvar instance + */ +condvar_t *condvar_create(condvar_type_t type); + +#endif /** THREADING_CONDVAR_H_ @} */ diff --git a/src/libstrongswan/threading/mutex.c b/src/libstrongswan/threading/mutex.c index a3d131a05..6133822c3 100644 --- a/src/libstrongswan/threading/mutex.c +++ b/src/libstrongswan/threading/mutex.c @@ -17,13 +17,62 @@ #define _GNU_SOURCE #include <pthread.h> -#include <threading.h> #include <library.h> #include <debug.h> #include "mutex.h" #include "lock_profiler.h" +typedef struct private_mutex_t private_mutex_t; +typedef struct private_r_mutex_t private_r_mutex_t; + +/** + * private data of mutex + */ +struct private_mutex_t { + + /** + * public functions + */ + mutex_t public; + + /** + * wrapped pthread mutex + */ + pthread_mutex_t mutex; + + /** + * is this a recursiv emutex, implementing private_r_mutex_t? + */ + bool recursive; + + /** + * profiling info, if enabled + */ + lock_profile_t profile; +}; + +/** + * private data of mutex, extended by recursive locking information + */ +struct private_r_mutex_t { + + /** + * Extends private_mutex_t + */ + private_mutex_t generic; + + /** + * thread which currently owns mutex + */ + pthread_t thread; + + /** + * times we have locked the lock, stored per thread + */ + pthread_key_t times; +}; + /** * Implementation of mutex_t.lock. */ diff --git a/src/libstrongswan/threading/mutex.h b/src/libstrongswan/threading/mutex.h index 50c066045..ca242f680 100644 --- a/src/libstrongswan/threading/mutex.h +++ b/src/libstrongswan/threading/mutex.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008 Tobias Brunner + * Copyright (C) 2008-2009 Tobias Brunner * Copyright (C) 2008 Martin Willi * Hochschule fuer Technik Rapperswil * @@ -14,60 +14,84 @@ * for more details. */ +/** + * @defgroup mutex mutex + * @{ @ingroup threading + */ + #ifndef THREADING_MUTEX_H_ #define THREADING_MUTEX_H_ -#include "lock_profiler.h" +typedef struct mutex_t mutex_t; +typedef enum mutex_type_t mutex_type_t; -typedef struct private_mutex_t private_mutex_t; -typedef struct private_r_mutex_t private_r_mutex_t; +#include "condvar.h" -/** - * private data of mutex +#ifdef __APPLE__ +/* on Mac OS X 10.5 several system calls we use are no cancellation points. + * fortunately, select isn't one of them, so we wrap some of the others with + * calls to select(2). */ -struct private_mutex_t { +#include <sys/socket.h> +#include <sys/select.h> - /** - * public functions - */ - mutex_t public; +#define WRAP_WITH_SELECT(func, socket, ...)\ + fd_set rfds; FD_ZERO(&rfds); FD_SET(socket, &rfds);\ + if (select(socket + 1, &rfds, NULL, NULL, NULL) <= 0) { return -1; }\ + return func(socket, __VA_ARGS__) - /** - * wrapped pthread mutex - */ - pthread_mutex_t mutex; +static inline int cancellable_accept(int socket, struct sockaddr *address, + socklen_t *address_len) +{ + WRAP_WITH_SELECT(accept, socket, address, address_len); +} +#define accept cancellable_accept +static inline int cancellable_recvfrom(int socket, void *buffer, size_t length, + int flags, struct sockaddr *address, socklen_t *address_len) +{ + WRAP_WITH_SELECT(recvfrom, socket, buffer, length, flags, address, address_len); +} +#define recvfrom cancellable_recvfrom +#endif /* __APPLE__ */ - /** - * is this a recursiv emutex, implementing private_r_mutex_t? - */ - bool recursive; - - /** - * profiling info, if enabled - */ - lock_profile_t profile; +/** + * Type of mutex. + */ +enum mutex_type_t { + /** default mutex */ + MUTEX_TYPE_DEFAULT = 0, + /** allow recursive locking of the mutex */ + MUTEX_TYPE_RECURSIVE = 1, }; /** - * private data of mutex, extended by recursive locking information + * Mutex wrapper implements simple, portable and advanced mutex functions. */ -struct private_r_mutex_t { +struct mutex_t { /** - * Extends private_mutex_t + * Acquire the lock to the mutex. */ - private_mutex_t generic; + void (*lock)(mutex_t *this); /** - * thread which currently owns mutex + * Release the lock on the mutex. */ - pthread_t thread; + void (*unlock)(mutex_t *this); /** - * times we have locked the lock, stored per thread + * Destroy a mutex instance. */ - pthread_key_t times; + void (*destroy)(mutex_t *this); }; -#endif /* THREADING_MUTEX_H_ */ +/** + * Create a mutex instance. + * + * @param type type of mutex to create + * @return unlocked mutex instance + */ +mutex_t *mutex_create(mutex_type_t type); + +#endif /** THREADING_MUTEX_H_ @} */ diff --git a/src/libstrongswan/threading/rwlock.c b/src/libstrongswan/threading/rwlock.c index bf59f50f1..ee9fb10be 100644 --- a/src/libstrongswan/threading/rwlock.c +++ b/src/libstrongswan/threading/rwlock.c @@ -17,13 +17,74 @@ #define _GNU_SOURCE #include <pthread.h> -#include <threading.h> #include <library.h> #include <debug.h> #include "rwlock.h" +#include "condvar.h" +#include "mutex.h" #include "lock_profiler.h" +typedef struct private_rwlock_t private_rwlock_t; + +/** + * private data of rwlock + */ +struct private_rwlock_t { + + /** + * public functions + */ + rwlock_t public; + +#ifdef HAVE_PTHREAD_RWLOCK_INIT + + /** + * wrapped pthread rwlock + */ + pthread_rwlock_t rwlock; + +#else + + /** + * mutex to emulate a native rwlock + */ + mutex_t *mutex; + + /** + * condvar to handle writers + */ + condvar_t *writers; + + /** + * condvar to handle readers + */ + condvar_t *readers; + + /** + * number of waiting writers + */ + u_int waiting_writers; + + /** + * number of readers holding the lock + */ + u_int reader_count; + + /** + * current writer thread, if any + */ + pthread_t writer; + +#endif /* HAVE_PTHREAD_RWLOCK_INIT */ + + /** + * profiling info, if enabled + */ + lock_profile_t profile; +}; + + #ifdef HAVE_PTHREAD_RWLOCK_INIT /** diff --git a/src/libstrongswan/threading/rwlock.h b/src/libstrongswan/threading/rwlock.h index 2f4330ffb..a86a241c5 100644 --- a/src/libstrongswan/threading/rwlock.h +++ b/src/libstrongswan/threading/rwlock.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008 Tobias Brunner + * Copyright (C) 2008-2009 Tobias Brunner * Copyright (C) 2008 Martin Willi * Hochschule fuer Technik Rapperswil * @@ -14,69 +14,67 @@ * for more details. */ +/** + * @defgroup rwlock rwlock + * @{ @ingroup threading + */ + #ifndef THREADING_RWLOCK_H_ #define THREADING_RWLOCK_H_ -#include "lock_profiler.h" - -typedef struct private_rwlock_t private_rwlock_t; +typedef struct rwlock_t rwlock_t; +typedef enum rwlock_type_t rwlock_type_t; /** - * private data of rwlock + * Type of read-write lock. */ -struct private_rwlock_t { - - /** - * public functions - */ - rwlock_t public; - -#ifdef HAVE_PTHREAD_RWLOCK_INIT - - /** - * wrapped pthread rwlock - */ - pthread_rwlock_t rwlock; - -#else - - /** - * mutex to emulate a native rwlock - */ - mutex_t *mutex; +enum rwlock_type_t { + /** default condvar */ + RWLOCK_TYPE_DEFAULT = 0, +}; - /** - * condvar to handle writers - */ - condvar_t *writers; +/** + * Read-Write lock wrapper. + */ +struct rwlock_t { /** - * condvar to handle readers + * Acquire the read lock. */ - condvar_t *readers; + void (*read_lock)(rwlock_t *this); /** - * number of waiting writers + * Acquire the write lock. */ - u_int waiting_writers; + void (*write_lock)(rwlock_t *this); /** - * number of readers holding the lock + * Try to acquire the write lock. + * + * Never blocks, but returns FALSE if the lock was already occupied. + * + * @return TRUE if lock acquired */ - u_int reader_count; + bool (*try_write_lock)(rwlock_t *this); /** - * current writer thread, if any + * Release any acquired lock. */ - pthread_t writer; - -#endif /* HAVE_PTHREAD_RWLOCK_INIT */ + void (*unlock)(rwlock_t *this); /** - * profiling info, if enabled + * Destroy the read-write lock. */ - lock_profile_t profile; + void (*destroy)(rwlock_t *this); }; -#endif /* THREADING_THREADING_H_ */ +/** + * Create a read-write lock instance. + * + * @param type type of rwlock to create + * @return unlocked rwlock instance + */ +rwlock_t *rwlock_create(rwlock_type_t type); + +#endif /** THREADING_RWLOCK_H_ @} */ |