Module: sip-router
Branch: master
Commit: 7f54aacb740011abe968eb599509cf296e003a61
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=7f54aac…
Author: Anca Vamanu <anca.vamanu(a)1and1.ro>
Committer: Anca Vamanu <anca.vamanu(a)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);