[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