Changeset 1336:cec0812038bb in freeDiameter for extensions/rt_default/rt_default.c
- Timestamp:
- Apr 9, 2019, 10:46:50 PM (5 years ago)
- Branch:
- default
- Phase:
- public
- histedit_source:
- 4e04e2f73d936608db88f0e70d10049fcaf66190
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
extensions/rt_default/rt_default.c
r1235 r1336 38 38 */ 39 39 40 #include <signal.h> 41 40 42 #include "rt_default.h" 43 44 #define MODULE_NAME "rt_default" 45 46 #include <pthread.h> 47 48 static pthread_rwlock_t rtd_lock; 49 50 static char *rtd_config_file; 41 51 42 52 /* The callback called on new messages */ … … 45 55 struct msg * msg = *pmsg; 46 56 TRACE_ENTRY("%p %p %p", cbdata, msg, candidates); 57 int ret; 47 58 48 59 CHECK_PARAMS(msg && candidates); 49 60 61 if (pthread_rwlock_rdlock(&rtd_lock) != 0) { 62 fd_log_notice("%s: read-lock failed, skipping handler", MODULE_NAME); 63 return 0; 64 } 50 65 /* Simply pass it to the appropriate function */ 51 66 if (FD_IS_LIST_EMPTY(candidates)) { 52 ret urn0;67 ret = 0; 53 68 } else { 54 ret urnrtd_process( msg, candidates );69 ret = rtd_process( msg, candidates ); 55 70 } 71 if (pthread_rwlock_unlock(&rtd_lock) != 0) { 72 fd_log_notice("%s: read-unlock failed after rtd_out, exiting", MODULE_NAME); 73 exit(1); 74 } 75 return ret; 56 76 } 57 77 … … 59 79 static struct fd_rt_out_hdl * rtd_hdl = NULL; 60 80 81 static volatile int in_signal_handler = 0; 82 83 /* signal handler */ 84 static void sig_hdlr(void) 85 { 86 if (in_signal_handler) { 87 fd_log_error("%s: already handling a signal, ignoring new one", MODULE_NAME); 88 return; 89 } 90 in_signal_handler = 1; 91 92 if (pthread_rwlock_wrlock(&rtd_lock) != 0) { 93 fd_log_error("%s: locking failed, aborting config reload", MODULE_NAME); 94 return; 95 } 96 rtd_conf_reload(rtd_config_file); 97 if (pthread_rwlock_unlock(&rtd_lock) != 0) { 98 fd_log_error("%s: unlocking failed after config reload, exiting", MODULE_NAME); 99 exit(1); 100 } 101 102 fd_log_notice("%s: reloaded configuration", MODULE_NAME); 103 104 in_signal_handler = 0; 105 } 106 107 61 108 /* entry point */ 62 109 static int rtd_entry(char * conffile) 63 110 { 64 111 TRACE_ENTRY("%p", conffile); 65 112 113 rtd_config_file = conffile; 114 pthread_rwlock_init(&rtd_lock, NULL); 115 116 if (pthread_rwlock_wrlock(&rtd_lock) != 0) { 117 fd_log_notice("%s: write-lock failed, aborting", MODULE_NAME); 118 return EDEADLK; 119 } 120 66 121 /* Initialize the repo */ 67 122 CHECK_FCT( rtd_init() ); … … 69 124 /* Parse the configuration file */ 70 125 CHECK_FCT( rtd_conf_handle(conffile) ); 71 126 127 if (pthread_rwlock_unlock(&rtd_lock) != 0) { 128 fd_log_notice("%s: write-unlock failed, aborting", MODULE_NAME); 129 return EDEADLK; 130 } 131 132 /* Register reload callback */ 133 CHECK_FCT(fd_event_trig_regcb(SIGUSR1, MODULE_NAME, sig_hdlr)); 134 72 135 #if 0 73 136 /* Dump the rules */ … … 92 155 /* Destroy the data */ 93 156 rtd_fini(); 94 157 158 pthread_rwlock_destroy(&rtd_lock); 159 95 160 /* Done */ 96 161 return ; 97 162 } 98 163 99 EXTENSION_ENTRY( "rt_default", rtd_entry);164 EXTENSION_ENTRY(MODULE_NAME, rtd_entry);
Note: See TracChangeset
for help on using the changeset viewer.