[sr-dev] git:master: modules_k/presence: Fixed bug - calling child_init in process main
Daniel-Constantin Mierla
miconda at gmail.com
Mon Mar 12 16:21:07 CET 2012
Hello,
ok, thanks for explanation -- I saw the commit message and I wondered if
there was something left wrong with the way connections are created now
to avoid sharing.
Cheers,
Daniel
On 3/12/12 4:09 PM, Anca Vamanu wrote:
> Hi Daniel,
>
> On 03/12/2012 05:02 PM, Daniel-Constantin Mierla wrote:
>> Hello,
>>
>> On 3/8/12 4:49 PM, Anca Vamanu wrote:
>>> 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.
>> Have you noticed db connection sharing between processes?
>>
>> The DB API stores for each connection the PID of the process opening it.
>> When a process is asking for a db connection and URL matches and
>> existing one, current PID is checked with connection pid and if they
>> differ, a new connection should be created, thus no connection sharing
>> should be between processes. Is the db connection open in main process
>> used in other processes?
>>
> Yes, this was the case db connection opened by main process inherited
> by the TCP children. The bug was in presence module and it was
> introduced by me a couple of weeks ago when I permitted calling
> child_init function for rank PROC_MAIN.
>
> I noticed only last week when I did the fix that the main process
> calls child_init with this PROC_MAIN rank before forking the tcp
> children. Actually there isn't any place now where child_init is
> called by proc main after all forks.
>
> I understand that the new DB connection is made quite safe to avoid
> this case, but the bad thing was that presence module had in
> child_init somewhere at the start:
>
> if (pa_db)
> return 0;
>
> So it actually did not call the init connection function again for
> those children.
>
>
> Regards,
> Anca
>
>
>
>> Cheers,
>> Daniel
>>
>
--
Daniel-Constantin Mierla
Kamailio Advanced Training, April 23-26, 2012, Berlin, Germany
http://www.asipto.com/index.php/kamailio-advanced-training/
More information about the sr-dev
mailing list