Module: sip-router Branch: master Commit: f6d530e68ffe9db11f5f148c51f8bff0b542f028 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=f6d530e6...
Author: Jason Penton jason.penton@smilecoms.com Committer: Jason Penton jason.penton@smilecoms.com Date: Tue Oct 22 20:57:52 2013 +0200
modules/cdp: allow CDP child processes to respond to dynamic cfg changes - this for example allows dumping pkg memory using core cfg variables similar to SIP workers, etc
---
modules/cdp/diameter_peer.c | 7 +++++++ modules/cdp/mod.c | 3 +++ modules/cdp/receiver.c | 3 +++ modules/cdp/tcp_accept.c | 4 ++++ modules/cdp/timer.c | 3 +++ modules/cdp/worker.c | 3 +++ 6 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/modules/cdp/diameter_peer.c b/modules/cdp/diameter_peer.c index ce86e1a..6bb5da2 100644 --- a/modules/cdp/diameter_peer.c +++ b/modules/cdp/diameter_peer.c @@ -62,6 +62,7 @@ #include "session.h"
#include "../../pt.h" +#include "../../cfg/cfg_struct.h"
dp_config *config=0; /**< Configuration for this diameter peer */
@@ -304,6 +305,7 @@ int diameter_peer_start(int blocking) if (pid==0) { srandom(time(0)*k); snprintf(pt[process_no].desc, MAX_PT_DESC,"cdp worker child=%d", k ); + if (cfg_child_init()) return 0; worker_process(k); LM_CRIT("init_diameter_peer(): worker_process finished without exit!\n"); exit(-1); @@ -330,6 +332,7 @@ int diameter_peer_start(int blocking) srandom(time(0)*k); snprintf(pt[process_no].desc, MAX_PT_DESC, "cdp receiver peer unknown"); + if (cfg_child_init()) return 0; receiver_process(NULL); LM_CRIT("init_diameter_peer(): receiver_process finished without exit!\n"); exit(-1); @@ -349,6 +352,7 @@ int diameter_peer_start(int blocking) srandom(time(0)*k); snprintf(pt[process_no].desc, MAX_PT_DESC, "cdp_receiver_peer=%.*s", p->fqdn.len,p->fqdn.s ); + if (cfg_child_init()) return 0; receiver_process(p); LM_CRIT("init_diameter_peer(): receiver_process finished without exit!\n"); exit(-1); @@ -367,6 +371,7 @@ int diameter_peer_start(int blocking) return 0; } if (pid==0) { + if (cfg_child_init()) return 0; acceptor_process(config); LM_CRIT("init_diameter_peer(): acceptor_process finished without exit!\n"); exit(-1); @@ -377,6 +382,7 @@ int diameter_peer_start(int blocking) /* fork/become timer */ if (blocking) { dp_add_pid(getpid()); + if (cfg_child_init()) return 0; timer_process(1); } else{ @@ -386,6 +392,7 @@ int diameter_peer_start(int blocking) return 0; } if (pid==0) { + if (cfg_child_init()) return 0; timer_process(0); LM_CRIT("init_diameter_peer(): timer_process finished without exit!\n"); exit(-1); diff --git a/modules/cdp/mod.c b/modules/cdp/mod.c index 258a710..0f12b4c 100644 --- a/modules/cdp/mod.c +++ b/modules/cdp/mod.c @@ -52,6 +52,8 @@ #include "config.h" #include "cdp_load.h"
+#include "../../cfg/cfg_struct.h" + MODULE_VERSION
char* config_file="DiameterPeer.xml"; /**< default DiameterPeer configuration filename */ @@ -219,6 +221,7 @@ static int cdp_init( void ) return 1; } register_procs(2+config->workers + 2 * config->peers_cnt); + cfg_register_child(2+config->workers + 2 * config->peers_cnt); return 0; }
diff --git a/modules/cdp/receiver.c b/modules/cdp/receiver.c index 538b233..5762694 100644 --- a/modules/cdp/receiver.c +++ b/modules/cdp/receiver.c @@ -69,6 +69,8 @@
#include "receiver.h"
+#include "../../cfg/cfg_struct.h" + extern dp_config *config; /**< Configuration for this diameter peer */
int dp_add_pid(pid_t pid); @@ -643,6 +645,7 @@ int receive_loop(peer *original_peer)
while(!n){ if (shutdownx&&*shutdownx) break; + cfg_update();
log_serviced_peers();
diff --git a/modules/cdp/tcp_accept.c b/modules/cdp/tcp_accept.c index fdf3dd3..473f14b 100644 --- a/modules/cdp/tcp_accept.c +++ b/modules/cdp/tcp_accept.c @@ -63,6 +63,8 @@ #include "tcp_accept.h" #include "receiver.h"
+#include "../../cfg/cfg_struct.h" + /* defined in ../diameter_peer.c */ int dp_add_pid(pid_t pid);
@@ -205,6 +207,8 @@ void accept_loop() while(1){ if (shutdownx && *shutdownx) break; + cfg_update(); + timeout.tv_sec=2; timeout.tv_usec=0; FD_ZERO(&listen_set); diff --git a/modules/cdp/timer.c b/modules/cdp/timer.c index 0ac18c5..17be7de 100644 --- a/modules/cdp/timer.c +++ b/modules/cdp/timer.c @@ -53,6 +53,8 @@
#include "timer.h"
+#include "../../cfg/cfg_struct.h" +
/* defined in ../diameter_peer.c */ int dp_add_pid(pid_t pid); @@ -83,6 +85,7 @@ void timer_loop() while(1){ if (shutdownx && *shutdownx) break; now = time(0); + cfg_update(); do { cb = 0; diff --git a/modules/cdp/worker.c b/modules/cdp/worker.c index b4d4fb9..45cffe6 100644 --- a/modules/cdp/worker.c +++ b/modules/cdp/worker.c @@ -57,6 +57,8 @@ #include "worker.h" #include "diameter_api.h"
+#include "../../cfg/cfg_struct.h" + /* defined in ../diameter_peer.c */ int dp_add_pid(pid_t pid); void dp_del_pid(pid_t pid); @@ -315,6 +317,7 @@ void worker_process(int id) { /* init the application level for this child */ while (1) { if (shutdownx && (*shutdownx)) break; + cfg_update(); t = take_task(); if (!t.msg) { if (shutdownx && (*shutdownx)) break;