[asterisk-bugs] [JIRA] (ASTERISK-25218) res_config_pgsql freezes asterisk at startup

Roman (JIRA) noreply at issues.asterisk.org
Tue Jun 30 17:28:33 CDT 2015


Roman created ASTERISK-25218:
--------------------------------

             Summary: res_config_pgsql freezes asterisk at startup
                 Key: ASTERISK-25218
                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-25218
             Project: Asterisk
          Issue Type: Bug
      Security Level: None
          Components: Resources/res_config_pgsql
    Affects Versions: 13.4.0
         Environment: postgresql server 9.4.4
asterisk 13.4.0
ubuntu server 14.04.02 LTS
sip accounts & sip peers & queue_members configured as realtime with Postgresql datasource
            Reporter: Roman


i have production server with about 400 sip accounts with short registration timeout for each (less or equals to 60 seconds).
and sometimes when i restart the asterisk server i see when * loads chan_sip or app_queue module then start process is freezes and nothing happens at all.
only "kill -9 pid" can help me to stop the process.

then i run gdb and run bt:
#5  0x00007f0855fe3add in _pgsql_exec (result=0x7fff241941a0,
    sql=0x1da3e28 "SELECT a.attname, t.typname, a.attlen, a.attnotnull, d.adsrc, a.atttypmod FROM (((pg_catalog.pg_class c INNER JOIN pg_catalog.pg_namespace n ON n.oid = c.re          lnamespace AND c.relname = 'queue_members' A"..., tablename=0x7fff24194430 "queue_members", database=0x7f08561f0700 <dbname> "voip") at res_config_pgsql.c:161
This "init table" request (function find_table) running infinitely

After reading lot of debug logs i see that right after init table request some of my sip accounts transmit a register message to the server and asterisk makes database request for select data. But init table answer not received by the module yet. Looking at source code of module res_config_pgsql i can see global variable PGconn *pgsqlConn and main function which uses this variable - pgsql_exec, for concurrence execution uses mutex pgsql_lock.
but issue has function find_table because he calls function pgsql_exec without locking the connection mutex

after adding lock to the find_table function the issue is gone
i hope this issue will be fixed in the next releases



--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list