|
@@ -358,6 +358,16 @@ static int mod_init(void)
|
|
}
|
|
}
|
|
|
|
|
|
/* Shall we use database ? */
|
|
/* Shall we use database ? */
|
|
|
|
+ switch (ul_db_mode) {
|
|
|
|
+ case DB_ONLY:
|
|
|
|
+ case WRITE_THROUGH:
|
|
|
|
+ case WRITE_BACK:
|
|
|
|
+ /*
|
|
|
|
+ * register the need to be called post-fork of all children
|
|
|
|
+ * with the special rank PROC_POSTCHILDINIT
|
|
|
|
+ */
|
|
|
|
+ ksr_module_set_flag(KSRMOD_FLAG_POSTCHILDINIT);
|
|
|
|
+ }
|
|
if (ul_db_mode != NO_DB) { /* Yes */
|
|
if (ul_db_mode != NO_DB) { /* Yes */
|
|
if (db_bind_mod(&ul_db_url, &ul_dbf) < 0) { /* Find database module */
|
|
if (db_bind_mod(&ul_db_url, &ul_dbf) < 0) { /* Find database module */
|
|
LM_ERR("failed to bind database module\n");
|
|
LM_ERR("failed to bind database module\n");
|
|
@@ -452,14 +462,14 @@ static int child_init(int _rank)
|
|
case WRITE_THROUGH:
|
|
case WRITE_THROUGH:
|
|
/* connect to db only from SIP workers, TIMER and MAIN processes,
|
|
/* connect to db only from SIP workers, TIMER and MAIN processes,
|
|
* and RPC processes */
|
|
* and RPC processes */
|
|
- if (_rank<=0 && _rank!=PROC_TIMER && _rank!=PROC_MAIN
|
|
|
|
|
|
+ if (_rank<=0 && _rank!=PROC_TIMER && _rank!=PROC_POSTCHILDINIT
|
|
&& _rank!=PROC_RPC)
|
|
&& _rank!=PROC_RPC)
|
|
return 0;
|
|
return 0;
|
|
break;
|
|
break;
|
|
case WRITE_BACK:
|
|
case WRITE_BACK:
|
|
/* connect to db only from TIMER (for flush), from MAIN (for
|
|
/* connect to db only from TIMER (for flush), from MAIN (for
|
|
* final flush() and from child 1 for preload */
|
|
* final flush() and from child 1 for preload */
|
|
- if (_rank!=PROC_TIMER && _rank!=PROC_MAIN && _rank!=PROC_SIPINIT)
|
|
|
|
|
|
+ if (_rank!=PROC_TIMER && _rank!=PROC_POSTCHILDINIT && _rank!=PROC_SIPINIT)
|
|
return 0;
|
|
return 0;
|
|
break;
|
|
break;
|
|
case DB_READONLY:
|
|
case DB_READONLY:
|