]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
rx/rxkad: Move rxkad initialisation into rxkad
authorSimon Wilkinson <sxw@your-file-system.com>
Tue, 5 Jul 2011 08:20:15 +0000 (09:20 +0100)
committerJeffrey Altman <jaltman@openafs.org>
Wed, 7 Sep 2011 00:43:53 +0000 (17:43 -0700)
When the RX pthread conversion was done, the initialisation of rxkad
mutexes was incorporated into the rx library itself. This is a layering
violation (it breaks the relatively clean security object abstraction),
and means that you can't actually use RX without the rxkad library.

So, remove all of this initialisation from RX. As security libraries
don't have an explicit initialisation function, we setup our various
mutexes using a pthread_once function called from the NewSecurityObject
functions.

This has the added bonus that it removes the final error in rx.c for
pthread builds, and so another bit of warning suppression can be
removed.

Change-Id: I3cf9b2404a03fb58534c5f41afd77aa5ba5e2256
Reviewed-on: http://gerrit.openafs.org/5361
Reviewed-by: Derrick Brashear <shadow@dementix.org>
Tested-by: Jeffrey Altman <jaltman@openafs.org>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
README.WARNINGS
src/libafsrpc/Makefile.in
src/rx/rx.c
src/rxkad/rxkad_client.c
src/rxkad/rxkad_common.c
src/rxkad/rxkad_prototypes.h
src/rxkad/rxkad_server.c
src/rxkad/stats.h
src/shlibafsrpc/Makefile.in

index 9c439aa924eec57b4541f355fed22d23aedc9257..2861fb4a65486343e6df71285d55acb47b0d7e45 100644 (file)
@@ -57,7 +57,6 @@ libadmin/kas/afs_kasAdmin.c: all     : Ubik_Call nonsense
 libadmin/samples/rxstat_query_peer.c : all : util_RPCStatsStateGet types
 libadmin/samples/rxstat_query_process.c : all : util_RPCStatsStateGet types
 libadmin/test/client.c : all         : util_RPCStatsStateGet types
-rx/rx.c                     : all (pthread) : rxkad_global_stats_init not proto'd
 rxkad/ticket5.c             : all           : v5gen.c has set-but-unused variables
 ubik/ubikclient.c    : strict-protos : ubik_Call
 volser/vol-dump.c    : format        : afs_sfsize_t
index bb09400c9b079bbf9ae9de28b1cfa128603a6584..3b49d0229e5f5fb7a1f4e745b9e34e7b2e1dae95 100644 (file)
@@ -134,7 +134,6 @@ rx_user.o: ${RX}/rx_user.c
 rx_pthread.o: ${RX}/rx_pthread.c
        $(AFS_CCRULE) $(RX)/rx_pthread.c
 
-CFLAGS_rx.o = @CFLAGS_NOERROR@
 rx.o: ${RX}/rx.c
        $(AFS_CCRULE) $(RX)/rx.c
 
index 0216480b742b373ced2d18643b805fc061b03fb9..1ddc09ed7253eade003475853356ac42c740c7cc 100644 (file)
@@ -193,8 +193,6 @@ extern afs_kmutex_t event_handler_mutex;
 extern afs_kmutex_t listener_mutex;
 extern afs_kmutex_t rx_if_init_mutex;
 extern afs_kmutex_t rx_if_mutex;
-extern afs_kmutex_t rxkad_client_uid_mutex;
-extern afs_kmutex_t rxkad_random_mutex;
 
 extern afs_kcondvar_t rx_event_handler_cond;
 extern afs_kcondvar_t rx_listener_cond;
@@ -222,8 +220,6 @@ rxi_InitPthread(void)
     MUTEX_INIT(&listener_mutex, "listener", MUTEX_DEFAULT, 0);
     MUTEX_INIT(&rx_if_init_mutex, "if init", MUTEX_DEFAULT, 0);
     MUTEX_INIT(&rx_if_mutex, "if", MUTEX_DEFAULT, 0);
-    MUTEX_INIT(&rxkad_client_uid_mutex, "uid", MUTEX_DEFAULT, 0);
-    MUTEX_INIT(&rxkad_random_mutex, "rxkad random", MUTEX_DEFAULT, 0);
     MUTEX_INIT(&rx_debug_mutex, "debug", MUTEX_DEFAULT, 0);
 
     CV_INIT(&rx_event_handler_cond, "evhand", CV_DEFAULT, 0);
@@ -232,8 +228,6 @@ rxi_InitPthread(void)
     osi_Assert(pthread_key_create(&rx_thread_id_key, NULL) == 0);
     osi_Assert(pthread_key_create(&rx_ts_info_key, NULL) == 0);
 
-    rxkad_global_stats_init();
-
     MUTEX_INIT(&rx_rpc_stats, "rx_rpc_stats", MUTEX_DEFAULT, 0);
     MUTEX_INIT(&rx_freePktQ_lock, "rx_freePktQ_lock", MUTEX_DEFAULT, 0);
 #ifdef RX_ENABLE_LOCKS
index 1e36c160bddf6911952359d33eba158c1b1e3d74..f8522d1f90889f5c87b8dde1e1d7bb9e81b9c38e 100644 (file)
 #endif /* !UKERNEL */
 #else /* ! KERNEL */
 #include <roken.h>
-#ifdef AFS_PTHREAD_ENV
-#include "rx/rxkad.h"
-#endif /* AFS_PTHREAD_ENV */
 #endif /* KERNEL */
 
+
 #include <rx/rx.h>
 #include <rx/xdr.h>
 
+#include "rxkad.h"
 #include "stats.h"
 #include "private_data.h"
 #define XPRT_RXKAD_CLIENT
@@ -157,6 +156,8 @@ rxkad_NewClientSecurityObject(rxkad_level level,
     int code;
     int size, psize;
 
+    rxkad_Init();
+
     size = sizeof(struct rx_securityClass);
     tsc = rxi_Alloc(size);
     memset((void *)tsc, 0, size);
index e4b01d37626f163312dc21a7f8db30e1bbbc7817..8eed980a4bb8f7f2b8153c116ad8014927a0ae83 100644 (file)
@@ -67,6 +67,32 @@ struct rxkad_stats rxkad_stats = { { 0 } };
 #endif /* AFS_PTHREAD_ENV */
 
 #ifdef AFS_PTHREAD_ENV
+/* Pthread initialisation */
+static pthread_once_t rxkad_once_init = PTHREAD_ONCE_INIT;
+extern pthread_mutex_t rxkad_client_uid_mutex;
+extern pthread_mutex_t rxkad_random_mutex;
+
+static void
+rxkad_global_stats_init(void)
+{
+    osi_Assert(pthread_mutex_init(&rxkad_global_stats_lock, (const pthread_mutexattr_t *)0) == 0);
+    osi_Assert(pthread_key_create(&rxkad_stats_key, NULL) == 0);
+    memset(&rxkad_global_stats, 0, sizeof(rxkad_global_stats));
+}
+
+static void
+rxkad_InitPthread(void) {
+    MUTEX_INIT(&rxkad_client_uid_mutex, "uid", MUTEX_DEFAULT, 0);
+    MUTEX_INIT(&rxkad_random_mutex, "rxkad random", MUTEX_DEFAULT, 0);
+
+    rxkad_global_stats_init();
+}
+
+void
+rxkad_Init(void) {
+    osi_Assert(pthread_once(&rxkad_once_init, rxkad_InitPthread) == 0);
+}
+
 /* rxkad_stats related stuff */
 
 /*
@@ -84,12 +110,6 @@ struct rxkad_stats rxkad_stats = { { 0 } };
        osi_Assert((head) && ((head)->prev == NULL)); \
     } while(0)
 
-void rxkad_global_stats_init(void) {
-    osi_Assert(pthread_mutex_init(&rxkad_global_stats_lock, (const pthread_mutexattr_t *)0) == 0);
-    osi_Assert(pthread_key_create(&rxkad_stats_key, NULL) == 0);
-    memset(&rxkad_global_stats, 0, sizeof(rxkad_global_stats));
-}
-
 rxkad_stats_t *
 rxkad_thr_stats_init(void) {
     rxkad_stats_t * rxkad_stats;
@@ -163,6 +183,12 @@ int rxkad_stats_agg(rxkad_stats_t * rxkad_stats) {
     RXKAD_GLOBAL_STATS_UNLOCK;
     return 0;
 }
+#else
+void
+rxkad_Init(void)
+{
+    return;
+}
 #endif /* AFS_PTHREAD_ENV */
 
 /* static prototypes */
index 71da356eec39cebc155d5bef5382d7f6bb9889de..be0360867873fe586b839cae52eee415c9512d9b 100644 (file)
@@ -52,6 +52,8 @@ extern int rxkad_GetResponse(struct rx_securityClass *aobj,
 extern void rxkad_ResetState(void);
 
 /* rxkad_common.c */
+extern void rxkad_Init(void);
+
 struct rxkad_endpoint;
 extern int rxkad_SetupEndpoint(struct rx_connection *aconnp,
                               struct rxkad_endpoint *aendpointp);
@@ -80,8 +82,6 @@ extern int rxkad_GetStats(struct rx_securityClass *aobj,
 extern rxkad_level rxkad_StringToLevel(char *string);
 extern char *rxkad_LevelToString(rxkad_level level);
 
-extern void rxkad_global_stats_init(void);
-
 /* rxkad_errs.c */
 
 /* rxkad_server.c */
index 0b2745a88ea08b93f3090306561afec1d7deb224..82b1c969658cbce526d90416a03940421d4386ac 100644 (file)
@@ -137,6 +137,8 @@ rxkad_NewServerSecurityObject(rxkad_level level, void *get_key_rock,
     struct rxkad_sprivate *tsp;
     int size;
 
+    rxkad_Init();
+
     if (!get_key)
        return 0;
 
index 3df9c3e7e098e4010e64f0ea4fcee05f73290731..34ff09f1438f16c7dfbb4dfe95c736253941536f 100644 (file)
@@ -69,7 +69,6 @@ struct rxkad_global_stats {
 extern pthread_mutex_t rxkad_global_stats_lock;
 extern pthread_key_t rxkad_stats_key;
 
-extern void rxkad_global_stats_init(void);
 extern rxkad_stats_t * rxkad_thr_stats_init(void);
 extern int rxkad_stats_agg(rxkad_stats_t *);
 
index 9c5cfd0b04db1a734b118b3f7a5cea20f01c02d1..29b9226cfb599e93e988f396fb66b3bb47bdd2f0 100644 (file)
@@ -155,7 +155,6 @@ rx_user.o: ${RX}/rx_user.c
 rx_pthread.o: ${RX}/rx_pthread.c
        $(AFS_CCRULE) $(RX)/rx_pthread.c
 
-CFLAGS_rx.o = @CFLAGS_NOERROR@
 rx.o: ${RX}/rx.c
        $(AFS_CCRULE) $(RX)/rx.c