[sr-dev] git:master: lib/kmi, mi_*: better handling of mi child init

Daniel-Constantin Mierla miconda at gmail.com
Fri Sep 30 14:03:32 CEST 2011


Module: sip-router
Branch: master
Commit: a367a923f83a60b1b72907d42afff4484f49ad35
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=a367a923f83a60b1b72907d42afff4484f49ad35

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date:   Fri Sep 30 13:58:16 2011 +0200

lib/kmi, mi_*: better handling of mi child init

---

 lib/kmi/mi.c                        |   21 +++++++++++++++------
 lib/kmi/mi.h                        |    2 +-
 modules/mi_rpc/mi_rpc_mod.c         |    2 +-
 modules_k/mi_datagram/mi_datagram.c |    2 +-
 modules_k/mi_fifo/mi_fifo.c         |    2 +-
 modules_k/mi_xmlrpc/mi_xmlrpc.c     |    2 +-
 6 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/lib/kmi/mi.c b/lib/kmi/mi.c
index 662de88..b20de19 100644
--- a/lib/kmi/mi.c
+++ b/lib/kmi/mi.c
@@ -100,7 +100,14 @@ int register_mi_mod( char *mod_name, mi_export_t *mis)
 
 static int mi_commands_initialized = 0;
 
-int init_mi_child(void)
+
+/**
+ * Init a process to work properly for MI commands
+ * - rank: rank of the process (PROC_XYZ...)
+ * - mode: 0 - don't try to init worker for SIP commands
+ *         1 - try to init worker for SIP commands
+ */
+int init_mi_child(int rank, int mode)
 {
 	int i;
 
@@ -114,11 +121,13 @@ int init_mi_child(void)
 			return -1;
 		}
 	}
-	if(is_sip_worker(PROC_NOCHLDINIT)) {
-		LM_DBG("initalizing proc rpc for sip handling\n");
-		if(init_child(PROC_SIPRPC)<0) {
-			LM_ERR("failed to init proc rpc for sip handling\n");
-			return -1;
+	if(mode==1) {
+		if(is_sip_worker(rank)) {
+			LM_DBG("initalizing proc rpc for sip handling\n");
+			if(init_child(PROC_SIPRPC)<0) {
+				LM_ERR("failed to init proc rpc for sip handling\n");
+				return -1;
+			}
 		}
 	}
 	return 0;
diff --git a/lib/kmi/mi.h b/lib/kmi/mi.h
index 988bcd1..6735930 100644
--- a/lib/kmi/mi.h
+++ b/lib/kmi/mi.h
@@ -68,7 +68,7 @@ int register_mi_cmd( mi_cmd_f f, char *name, void *param,
 
 int register_mi_mod( char *mod_name, mi_export_t *mis);
 
-int init_mi_child(void);
+int init_mi_child(int rank, int mode);
 
 struct mi_cmd* lookup_mi_cmd( char *name, int len);
 
diff --git a/modules/mi_rpc/mi_rpc_mod.c b/modules/mi_rpc/mi_rpc_mod.c
index bfc4aaf..20acb9e 100644
--- a/modules/mi_rpc/mi_rpc_mod.c
+++ b/modules/mi_rpc/mi_rpc_mod.c
@@ -80,7 +80,7 @@ static int child_init(int rank)
 {
 	if(is_rpc_worker(rank)) {
 		LM_DBG("initializing child[%d] for rpc handling\n", rank);
-		if(init_mi_child()!=0) {
+		if(init_mi_child(rank, 0)!=0) {
 			LM_CRIT("Failed to init the mi commands\n");
 			return -1;
 		}
diff --git a/modules_k/mi_datagram/mi_datagram.c b/modules_k/mi_datagram/mi_datagram.c
index d36af3e..c0fd990 100644
--- a/modules_k/mi_datagram/mi_datagram.c
+++ b/modules_k/mi_datagram/mi_datagram.c
@@ -329,7 +329,7 @@ static void datagram_process(int rank)
 	LM_INFO("a new child %d/%d\n", rank, getpid());
 
 	/*child's initial settings*/
-	if ( init_mi_child()!=0) {
+	if ( init_mi_child(PROC_NOCHLDINIT, 1)!=0) {
 		LM_CRIT("failed to init the mi process\n");
 		exit(-1);
 	}
diff --git a/modules_k/mi_fifo/mi_fifo.c b/modules_k/mi_fifo/mi_fifo.c
index 6598e34..88666c8 100644
--- a/modules_k/mi_fifo/mi_fifo.c
+++ b/modules_k/mi_fifo/mi_fifo.c
@@ -229,7 +229,7 @@ static void fifo_process(int rank)
 		exit(-1);
 	}
 
-	if( init_mi_child()!=0) {
+	if( init_mi_child(PROC_NOCHLDINIT, 1)!=0) {
 		LM_CRIT("Failed to init the mi process\n");
 		exit(-1);
 	}
diff --git a/modules_k/mi_xmlrpc/mi_xmlrpc.c b/modules_k/mi_xmlrpc/mi_xmlrpc.c
index 9be1650..784f07e 100644
--- a/modules_k/mi_xmlrpc/mi_xmlrpc.c
+++ b/modules_k/mi_xmlrpc/mi_xmlrpc.c
@@ -231,7 +231,7 @@ static void xmlrpc_process(int rank)
 
 	ServerInit(&srv);
 
-	if( init_mi_child() != 0 ) {
+	if( init_mi_child(PROC_NOCHLDINIT, 1) != 0 ) {
 		LM_CRIT("failed to init the mi process\n");
 		goto error;
 	}




More information about the sr-dev mailing list