<div dir="ltr">Hi Daniel,<div><br></div><div>this is the way we are creating the child processes (1 manager and n workers)</div><div>the problem is with the workers.</div><div>the worker will call a event-route and in the script config we try to call pres_refresh_watchers and that's where we get the pa_db = NULL.</div><div><br></div><div>as i understand from your email, if we change PROC_NOCHLDINIT and let the child_init execute for the forked process then it will also execute child_init in other modules ? it makes sense.</div><div><br></div><div>going to try this.</div><div><br><div><br></div><div><div>static int mod_child_init(int rank)</div><div>{</div><div><span class="" style="white-space:pre"> </span>int pid;</div><div><span class="" style="white-space:pre">   </span>int i;</div><div><br></div><div><span class="" style="white-space:pre">    </span>fire_init_event(rank);</div><div><br></div><div><span class="" style="white-space:pre">    </span>if (rank==PROC_MAIN) {</div><div><span class="" style="white-space:pre">             </span>pid=fork_process(PROC_NOCHLDINIT, "AMQP Manager", 1);</div><div><span class="" style="white-space:pre">            </span>if (pid<0)</div><div><span class="" style="white-space:pre">                      </span>return -1; /* error */</div><div><span class="" style="white-space:pre">             </span>if(pid==0){</div><div><span class="" style="white-space:pre">                        </span>kz_amqp_manager_loop(0);</div><div><span class="" style="white-space:pre">           </span>}</div><div><span class="" style="white-space:pre">          </span>else {</div><div><span class="" style="white-space:pre">                     </span>for(i=0; i < dbk_consumer_processes; i++) {</div><div><span class="" style="white-space:pre">                             </span>pid=fork_process(PROC_NOCHLDINIT, "AMQP Consumer", 1);</div><div><span class="" style="white-space:pre">                           </span>if (pid<0)</div><div><span class="" style="white-space:pre">                                      </span>return -1; /* error */</div><div><span class="" style="white-space:pre">                             </span>if(pid==0){</div><div><span class="" style="white-space:pre">                                        </span>mod_consumer_proc(i+1);</div><div><span class="" style="white-space:pre">                            </span>}</div><div><span class="" style="white-space:pre">                  </span>}</div><div><span class="" style="white-space:pre">          </span>}</div><div><span class="" style="white-space:pre">  </span>}</div><div><br></div><div><span class="" style="white-space:pre"> </span>return 0;</div><div>}</div></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Sep 8, 2014 at 1:11 PM, Daniel-Constantin Mierla <span dir="ltr"><<a href="mailto:miconda@gmail.com" target="_blank">miconda@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    Hello,<br>
    <br>
    the database connection should not be shared beween processes,
    because it can bring unexpected results in may places.<br>
    <br>
    Right now, the rule is to have one connection per process, shared by
    all modules in that process.<br>
    <br>
    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.<br>
    <br>
    When you create a new process, you tell the type of child and based
    on that child_init() from the other modules are executed.<br>
    <br>
    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.<br>
    <br>
    Cheers,<br>
    Daniel<div><div class="h5"><br>
    <br>
    <div>On 03/09/14 12:09, Luis Azedo wrote:<br>
    </div>
    <blockquote type="cite">
      <div dir="ltr">Hi Jason,
        <div><br>
        </div>
        <div>thanks for the reply.</div>
        <div><br>
        </div>
        <div>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.</div>
        <div>i commented these last statements in presence mod_init and
          i got it to work.</div>
        <div><br>
        </div>
        <div>// pa_dbf.close(pa_db);</div>
        <div>// pa_db = NULL;</div>
        <div><br>
        </div>
        <div>does this have any implications on how the module works ?
          is it ok to merge this change ?</div>
        <div><br>
        </div>
        <div>Thank you</div>
        <div><br>
          <div class="gmail_extra">
            <div class="gmail_quote">
              <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
                <br>
                <br>
----------------------------------------------------------------------<br>
                <br>
                Message: 1<br>
                Date: Sun, 31 Aug 2014 09:40:49 +0200<br>
                From: Jason Penton <<a href="mailto:jason.penton@gmail.com" target="_blank">jason.penton@gmail.com</a>><br>
                To: "Kamailio (SER) - Development Mailing List"<br>
                        <<a href="mailto:sr-dev@lists.sip-router.org" target="_blank">sr-dev@lists.sip-router.org</a>><br>
                Subject: Re: [sr-dev] accessing database from a child
                forked process<br>
                Message-ID:<br>
                        <<a href="mailto:CALoGXNWvHhCAO91Tfa0w8W3eYQRvfV7Qkgte7dBnD%2BciNr_Kpg@mail.gmail.com" target="_blank">CALoGXNWvHhCAO91Tfa0w8W3eYQRvfV7Qkgte7dBnD+ciNr_Kpg@mail.gmail.com</a>><br>
                Content-Type: text/plain; charset="utf-8"<br>
                <br>
                To confirm exactly what processes are being used, maybe
                check the log file<br>
                and take note of process id at each log event. For
                example you could check<br>
                the process id of the messages showing you the
                connection is null. Then run<br>
                kamcmd ps to show the process list with a description of
                each Kamailio<br>
                process. That will probably point you in the correct
                direction.<br>
                <br>
                Cheers<br>
                Jason<br>
                <br>
                <br>
                On Fri, Aug 29, 2014 at 3:53 PM, Luis Azedo <<a href="mailto:luis.azedo@factorlusitano.com" target="_blank">luis.azedo@factorlusitano.com</a>><br>
                wrote:<br>
                <br>
                > Hi,<br>
                ><br>
                > i have a module that creates 1 extra process where
                it processes stuff in a<br>
                > loop.<br>
                > on some condition i fire a route_event with a
                fakemsg and its up to the<br>
                > user of the module to take action, it tries to work
                like dispatcher module<br>
                > or htable (mod-init) events.<br>
                ><br>
                > the problem that i have is that, if i call some
                function on some module<br>
                > that performs a database action, the connection is
                null when it calls<br>
                > use_table.<br>
                ><br>
                > in this case i'm making this call<br>
                > event_route[my_module:my_event]<br>
                > {<br>
                >  $var(my_uri) = <<result of some
                operations>>;<br>
                >  pres_refresh_watchers("$var(my_uri)", "dialog",
                1);<br>
                > }<br>
                > presence module makes the call to use_table but
                this call fails because<br>
                > the connection is null. presence module is working
                fine besides this.<br>
                ><br>
                > if i make this call inside
                event_route[dispatcher:dst-up] it works.<br>
                ><br>
                > i think that dispatcher fires the event inside a
                callback from a<br>
                > registered timer, so, i think (may be wrong) that
                it comes from a different<br>
                > process ?<br>
                ><br>
                > i wonder if i'm missing something from child_init ?
                need to register<br>
                > something ?<br>
                ><br>
                > thanks for your help.<br>
                ><br>
                ><br>
                ><br>
                ><br>
                ><br>
                ><br>
                > _______________________________________________<br>
                > sr-dev mailing list<br>
                > <a href="mailto:sr-dev@lists.sip-router.org" target="_blank">sr-dev@lists.sip-router.org</a><br>
                > <a href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev" target="_blank">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev</a><br>
                ><br>
                ><br>
                -------------- next part --------------<br>
                An HTML attachment was scrubbed...<br>
                URL: <<a href="http://lists.sip-router.org/pipermail/sr-dev/attachments/20140831/9fba51e4/attachment-0001.html" target="_blank">http://lists.sip-router.org/pipermail/sr-dev/attachments/20140831/9fba51e4/attachment-0001.html</a>><br>
                <br>
                ------------------------------<br>
                <br>
                _______________________________________________<br>
                sr-dev mailing list<br>
                <a href="mailto:sr-dev@lists.sip-router.org" target="_blank">sr-dev@lists.sip-router.org</a><br>
                <a href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev" target="_blank">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev</a><br>
                <br>
                <br>
                End of sr-dev Digest, Vol 70, Issue 71<br>
                **************************************<br>
              </blockquote>
            </div>
            <br>
          </div>
        </div>
      </div>
      <br>
      <fieldset></fieldset>
      <br>
      <pre>_______________________________________________
sr-dev mailing list
<a href="mailto:sr-dev@lists.sip-router.org" target="_blank">sr-dev@lists.sip-router.org</a>
<a href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev" target="_blank">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev</a>
</pre>
    </blockquote>
    <br>
    </div></div><span class=""><font color="#888888"><pre cols="72">-- 
Daniel-Constantin Mierla
<a href="http://twitter.com/#!/miconda" target="_blank">http://twitter.com/#!/miconda</a> - <a href="http://www.linkedin.com/in/miconda" target="_blank">http://www.linkedin.com/in/miconda</a>
Next Kamailio Advanced Trainings 2014 - <a href="http://www.asipto.com" target="_blank">http://www.asipto.com</a>
Sep 22-25, Berlin, Germany</pre>
  </font></span></div>

</blockquote></div><br></div></div>