[sr-dev] git:master: modules_k/presence: Fixed bug - calling child_init in process main

Anca Vamanu anca.vamanu at 1and1.ro
Thu Mar 8 16:49:03 CET 2012


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

Author: Anca Vamanu <anca.vamanu at 1and1.ro>
Committer: Anca Vamanu <anca.vamanu at 1and1.ro>
Date:   Thu Mar  8 17:26:06 2012 +0200

modules_k/presence: Fixed bug - calling child_init in process main

	Process main calls child_init with process type PROC_MAIN before
	forking the TCP children. Since presence module opens database
	connection in child_init, this resulted in connection being
	inherited by the TCP children and wierd things happening when doing
	DB operations.
	Since there is no place in main() where child_init is
	called after all the forks, for the subs_db_mode=WRITE_BACK when
	process main needs to dump the subscribe table in database at
	shutdown, the solution was to open the database connection in
	mod_destroy().

---

 modules_k/presence/presence.c |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/modules_k/presence/presence.c b/modules_k/presence/presence.c
index 58ddbd4..dd415f7 100644
--- a/modules_k/presence/presence.c
+++ b/modules_k/presence/presence.c
@@ -369,7 +369,7 @@ static int mod_init(void)
  */
 static int child_init(int rank)
 {
-	if (rank==PROC_INIT || rank==PROC_TCP_MAIN)
+	if (rank==PROC_INIT || rank==PROC_MAIN || rank==PROC_TCP_MAIN)
 		return 0; /* do nothing for the main process */
 
 	pid = my_pid();
@@ -462,8 +462,14 @@ static int mi_child_init(void)
  */
 static void destroy(void)
 {
-	if(subs_htable && pa_db)
-		timer_db_update(0, 0);
+	if(subs_htable && subs_dbmode == WRITE_BACK) {
+		/* open database connection */
+		pa_db = pa_dbf.init(&db_url);
+		if (!pa_db) {
+			LM_ERR("mod_destroy: unsuccessful connecting to database\n");
+		} else
+			timer_db_update(0, 0);
+	}
 
 	if(subs_htable)
 		destroy_shtable(subs_htable, shtable_size);




More information about the sr-dev mailing list