Hello,
the database connection should not be shared beween processes, because
it can bring unexpected results in may places.
Right now, the rule is to have one connection per process, shared by all
modules in that process.
To achieve that, at mod_init each module opens database connection and
closes it before ending the function. Then in child_init() the
connection is opened again. Another module that will have to open in
child_init() will get the same connection now.
When you create a new process, you tell the type of child and based on
that child_init() from the other modules are executed.
What is the function do you use for creating a new process? Maybe you
can paste it here exactly how you do it and I can see if something can
be done.
Cheers,
Daniel
On 03/09/14 12:09, Luis Azedo wrote:
Hi Jason,
thanks for the reply.
the last 2 statements in presence module mod_init close the connection
and set pa_db to NULL. when my module main process forks the extra
processes the pa_db in presence is NULL, so when it calls
pres_refresh_watchers it fails because pa_db is NULL.
i commented these last statements in presence mod_init and i got it to
work.
// pa_dbf.close(pa_db);
// pa_db = NULL;
does this have any implications on how the module works ? is it ok to
merge this change ?
Thank you
----------------------------------------------------------------------
Message: 1
Date: Sun, 31 Aug 2014 09:40:49 +0200
From: Jason Penton <jason.penton(a)gmail.com
<mailto:jason.penton@gmail.com>>
To: "Kamailio (SER) - Development Mailing List"
<sr-dev(a)lists.sip-router.org
<mailto:sr-dev@lists.sip-router.org>>
Subject: Re: [sr-dev] accessing database from a child forked process
Message-ID:
<CALoGXNWvHhCAO91Tfa0w8W3eYQRvfV7Qkgte7dBnD+ciNr_Kpg(a)mail.gmail.com
<mailto:CALoGXNWvHhCAO91Tfa0w8W3eYQRvfV7Qkgte7dBnD%2BciNr_Kpg@mail.gmail.com>>
Content-Type: text/plain; charset="utf-8"
To confirm exactly what processes are being used, maybe check the
log file
and take note of process id at each log event. For example you
could check
the process id of the messages showing you the connection is null.
Then run
kamcmd ps to show the process list with a description of each Kamailio
process. That will probably point you in the correct direction.
Cheers
Jason
On Fri, Aug 29, 2014 at 3:53 PM, Luis Azedo
<luis.azedo(a)factorlusitano.com <mailto:luis.azedo@factorlusitano.com>>
wrote:
Hi,
i have a module that creates 1 extra process where it processes
stuff in a
loop.
on some condition i fire a route_event with a fakemsg and its up
to the
user of the module to take action, it tries to
work like
dispatcher module
or htable (mod-init) events.
the problem that i have is that, if i call some function on some
module
that performs a database action, the connection
is null when it
calls
use_table.
in this case i'm making this call
event_route[my_module:my_event]
{
$var(my_uri) = <<result of some operations>>;
pres_refresh_watchers("$var(my_uri)", "dialog", 1);
}
presence module makes the call to use_table but this call fails
because
the connection is null. presence module is
working fine besides
this.
if i make this call inside event_route[dispatcher:dst-up] it works.
i think that dispatcher fires the event inside a callback from a
registered timer, so, i think (may be wrong) that it comes from
a different
process ?
i wonder if i'm missing something from child_init ? need to register
something ?
thanks for your help.
_______________________________________________
sr-dev mailing list
sr-dev(a)lists.sip-router.org <mailto:sr-dev@lists.sip-router.org>
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev