[asterisk-bugs] [JIRA] (ASTERISK-27166) segfault at 10 ... error 4 in app_queue.so

Mario Lenis (JIRA) noreply at issues.asterisk.org
Wed Aug 2 11:58:57 CDT 2017


    [ https://issues.asterisk.org/jira/browse/ASTERISK-27166?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=237909#comment-237909 ] 

Mario Lenis edited comment on ASTERISK-27166 at 8/2/17 11:58 AM:
-----------------------------------------------------------------

I've been trying to reproduce the error but it happens randomly. What I see in common is when asterisk crashes, I see a beeperr message (transfer failed), agent hangs up before any agent answers

All transfers are attended using the features.conf setup, 

This is the minimun setup, there are some ODBC functions but since it doesn't show any errors or warnings I think it has no relevace. I appreciate any help and thanks in advance.

queues.conf
{code}
[general]
persistentmembers = yes
autofill = yes

[QueueA]
music = default
timeout = 10
strategy = rrmemory
servicelevel = 60
ringinuse = no
maxlen = 0
setinterfacevar = yes
setqueuevar = yes

[QueueB]
music = default
timeout = 10
strategy = rrmemory
servicelevel = 60
ringinuse = no
maxlen = 0
setinterfacevar = yes
setqueuevar = yes
{code}

extensions.conf
{code}
[default]

exten => 10,1,Answer()
 same => n,ExecIf($["${ORIGEN}"!=""]?Set(CALLERID(num)=${ORIGEN}))
 same => n,Gosub(Queues,${EXTEN},1(QueueA))

exten => 11,1,Answer()
 same => n,ExecIf($["${ORIGEN}"!=""]?Set(CALLERID(num)=${ORIGEN}))
 same => n,Gosub(Queues,${EXTEN},1(QueueB))

include => agents-login

[Queues]

; ARG1: Queue, ARG2: PRIO, ARG3: timeout
exten => _[0-9a-zA-Z].,1,Answer()
 same => n,ExecIf($["${CALLID}"!=""]?Gosub(DELETE_XFER,s,1))
 same => n,Set(__CALLID=${IF($["${CALLID}"=""]?${UNIQUEID}:${CALLID})})
 same => n,Set(__TO_QUEUE=${IF($["${ARG1}"!=""]?${ARG1}:${EXTEN})})
 same => n,Set(__ORIGEN=${CALLERID(num)})

 same => n,Set(QUEUE_PRIO=${IF($["${ARG2}"=""]?0:${ARG2})})
 same => n,ExecIf($["${ARG3}"!=""]?Set(QUEUE_TIMEOUT=${ARG3}))
; same => n,Set(ODBC_AGENTLOG()=${UNIQUEID},${TO_QUEUE},NONE,QUEUE_CONNECT,${CALLID},${CALLERID(num)},${EXTEN},,)
 same => n,Set(CHANNEL(musicclass)=q_${TO_QUEUE})
 same => n,System(test -e /var/www/htdocs/cmds/ivr/${TO_QUEUE}_ann.wav)
 same => n,Queue(${TO_QUEUE},tT,,${IF($["${SYSTEMSTATUS}"="SUCCESS"]?ivr/${TO_QUEUE}_ann)},${QUEUE_TIMEOUT},,,QUEUE_CONNECT\,${UNIQUEID})
 same => n,Return()

exten => h,1,Noop(${DB_DELETE(XFER/${CALLID})})

[QUEUE_CONNECT]
exten => s,1,Noop(**** ${MEMBERINTERFACE} ****)
 same => n,Set(MFILE=${QUEUENAME}_${UNIQUEID})
 same => n,Gosub(AGENT_RECORD,s,1(${MFILE}))
; same => n,Set(ODBC_AGENTUPDATE()=${ARG1},${MFILE},${MEMBERINTERFACE})
 same => n,Return()

[agentCallback]
exten => _X.,1,ExecIf($["${#EXTEN}"="2"]?Goto(default,${EXTEN},1))
 same => n,ExecIf($["${DB(XFER/${CALLID})}"="YES"]?Goto(,*${EXTEN},1))
 same => n,NoOp(Connecting the current call ${CHANNEL} to agent ${EXTEN})

 same => n,Dial(SIP/${EXTEN},,U(agent-xfer-hangup^${EXTEN}))
 same => n,Hangup()

exten => _*Z.,1,Noop(******* XFER TO ${EXTEN:1} *********)
 same => n,Set(CHANNEL(musicclass)=silence)
 same => n,Gosub(SET_XFER,s,1(NO))
 same => n,Set(__XFERID=${CHANNEL(uniqueid)}_${EPOCH})
 same => n,SET(__INICIO=${EPOCH})
 same => n,Set(__MONITOR_FILENAME=${TO_QUEUE}_${UNIQUEID}_${EPOCH})
 same => n,Dial(Local/${EXTEN:1}@agentCallback/n,20,tTU(AGENT_RECORD^${MONITOR_FILENAME}))

[agent-xfer-hangup]
exten => s,1,ExecIf(${DB_EXISTS(XFER/${CALLID})}?Set(CHANNEL(hangup_handler_push)=agent-xfer-hangup,end,1(${ARG1},${UNIQUEID})))
 same => n,Return()

exten => end,1,Noop(**** SUCCESS **** ${HANGUPCAUSE} ****)
 same => n,Set(TALK_TIME=${MATH(${EPOCH} - ${INICIO},i)})
 same => n,Set(TIME_WAIT=${CDR(duration)})
; same => n,Set(ODBC_AGENTLOG()=${XFERID},${TO_QUEUE},NONE,QUEUE_CONNECT,${CALLID},${CALLERID(num)},XFER,${MONITOR_FILENAME},)
 same => n,Set(ODBC_AGENTLOG()=${XFERID},${TO_QUEUE},Local/${ARG1}@agentCallback/n,COMPLETECALLER,${TIME_WAIT},${TALK_TIME},,,)
 same => n,Return()

[agents-login]
exten => *300,1,Answer()
 same => n,AddQueueMember(QueueA,Local/${CALLERID(num)}@agentCallback/n)

exten => *301,1,Answer()
 same => n,AddQueueMember(QueueB,Local/${CALLERID(num)}@agentCallback/n)

[SET_XFER]
exten => s,1,SET(DB(XFER/${CALLID})=${ARG1})
 same => n,Return()

[DELETE_XFER]
exten => s,1,Noop(${DB_DELETE(XFER/${CALLID})})
 same => n,Return()

[AGENT_RECORD]
exten => s,1,Set(CHANNEL(musicclass)=silence)
 same => n,Gosub(SET_XFER,s,1(YES))
 same => n,MixMonitor(${MONITOR}/${ARG1}.gsm,abW(2))
 same => n,Return()
{code}


was (Author: mario.lenis):
I've been trying to reproduce the error but it happens randomly. What I see in common is when asterisk crashes, I see a beeperr message (transfer failed), agent hangs up before any agent answers

All transfers are attended using the features.conf setup, 

This is the minimun setup, there are some ODBC functions but since it doesn't show any errors or warnings I think it has no relevace. I appreciate any help and thanks in advance.

queues.conf
```
[general]
persistentmembers = yes
autofill = yes

[QueueA]
music = default
timeout = 10
strategy = rrmemory
servicelevel = 60
ringinuse = no
maxlen = 0
setinterfacevar = yes
setqueuevar = yes

[QueueB]
music = default
timeout = 10
strategy = rrmemory
servicelevel = 60
ringinuse = no
maxlen = 0
setinterfacevar = yes
setqueuevar = yes
```

extensions.conf
```
[default]

exten => 10,1,Answer()
 same => n,ExecIf($["${ORIGEN}"!=""]?Set(CALLERID(num)=${ORIGEN}))
 same => n,Gosub(Queues,${EXTEN},1(QueueA))

exten => 11,1,Answer()
 same => n,ExecIf($["${ORIGEN}"!=""]?Set(CALLERID(num)=${ORIGEN}))
 same => n,Gosub(Queues,${EXTEN},1(QueueB))

include => agents-login

[Queues]

; ARG1: Queue, ARG2: PRIO, ARG3: timeout
exten => _[0-9a-zA-Z].,1,Answer()
 same => n,ExecIf($["${CALLID}"!=""]?Gosub(DELETE_XFER,s,1))
 same => n,Set(__CALLID=${IF($["${CALLID}"=""]?${UNIQUEID}:${CALLID})})
 same => n,Set(__TO_QUEUE=${IF($["${ARG1}"!=""]?${ARG1}:${EXTEN})})
 same => n,Set(__ORIGEN=${CALLERID(num)})

 same => n,Set(QUEUE_PRIO=${IF($["${ARG2}"=""]?0:${ARG2})})
 same => n,ExecIf($["${ARG3}"!=""]?Set(QUEUE_TIMEOUT=${ARG3}))
; same => n,Set(ODBC_AGENTLOG()=${UNIQUEID},${TO_QUEUE},NONE,QUEUE_CONNECT,${CALLID},${CALLERID(num)},${EXTEN},,)
 same => n,Set(CHANNEL(musicclass)=q_${TO_QUEUE})
 same => n,System(test -e /var/www/htdocs/cmds/ivr/${TO_QUEUE}_ann.wav)
 same => n,Queue(${TO_QUEUE},tT,,${IF($["${SYSTEMSTATUS}"="SUCCESS"]?ivr/${TO_QUEUE}_ann)},${QUEUE_TIMEOUT},,,QUEUE_CONNECT\,${UNIQUEID})
 same => n,Return()

exten => h,1,Noop(${DB_DELETE(XFER/${CALLID})})

[QUEUE_CONNECT]
exten => s,1,Noop(**** ${MEMBERINTERFACE} ****)
 same => n,Set(MFILE=${QUEUENAME}_${UNIQUEID})
 same => n,Gosub(AGENT_RECORD,s,1(${MFILE}))
; same => n,Set(ODBC_AGENTUPDATE()=${ARG1},${MFILE},${MEMBERINTERFACE})
 same => n,Return()

[agentCallback]
exten => _X.,1,ExecIf($["${#EXTEN}"="2"]?Goto(default,${EXTEN},1))
 same => n,ExecIf($["${DB(XFER/${CALLID})}"="YES"]?Goto(,*${EXTEN},1))
 same => n,NoOp(Connecting the current call ${CHANNEL} to agent ${EXTEN})

 same => n,Dial(SIP/${EXTEN},,U(agent-xfer-hangup^${EXTEN}))
 same => n,Hangup()

exten => _*Z.,1,Noop(******* XFER TO ${EXTEN:1} *********)
 same => n,Set(CHANNEL(musicclass)=silence)
 same => n,Gosub(SET_XFER,s,1(NO))
 same => n,Set(__XFERID=${CHANNEL(uniqueid)}_${EPOCH})
 same => n,SET(__INICIO=${EPOCH})
 same => n,Set(__MONITOR_FILENAME=${TO_QUEUE}_${UNIQUEID}_${EPOCH})
 same => n,Dial(Local/${EXTEN:1}@agentCallback/n,20,tTU(AGENT_RECORD^${MONITOR_FILENAME}))

[agent-xfer-hangup]
exten => s,1,ExecIf(${DB_EXISTS(XFER/${CALLID})}?Set(CHANNEL(hangup_handler_push)=agent-xfer-hangup,end,1(${ARG1},${UNIQUEID})))
 same => n,Return()

exten => end,1,Noop(**** SUCCESS **** ${HANGUPCAUSE} ****)
 same => n,Set(TALK_TIME=${MATH(${EPOCH} - ${INICIO},i)})
 same => n,Set(TIME_WAIT=${CDR(duration)})
; same => n,Set(ODBC_AGENTLOG()=${XFERID},${TO_QUEUE},NONE,QUEUE_CONNECT,${CALLID},${CALLERID(num)},XFER,${MONITOR_FILENAME},)
 same => n,Set(ODBC_AGENTLOG()=${XFERID},${TO_QUEUE},Local/${ARG1}@agentCallback/n,COMPLETECALLER,${TIME_WAIT},${TALK_TIME},,,)
 same => n,Return()

[agents-login]
exten => *300,1,Answer()
 same => n,AddQueueMember(QueueA,Local/${CALLERID(num)}@agentCallback/n)

exten => *301,1,Answer()
 same => n,AddQueueMember(QueueB,Local/${CALLERID(num)}@agentCallback/n)

[SET_XFER]
exten => s,1,SET(DB(XFER/${CALLID})=${ARG1})
 same => n,Return()

[DELETE_XFER]
exten => s,1,Noop(${DB_DELETE(XFER/${CALLID})})
 same => n,Return()

[AGENT_RECORD]
exten => s,1,Set(CHANNEL(musicclass)=silence)
 same => n,Gosub(SET_XFER,s,1(YES))
 same => n,MixMonitor(${MONITOR}/${ARG1}.gsm,abW(2))
 same => n,Return()
```

> segfault at 10 ... error 4 in app_queue.so
> ------------------------------------------
>
>                 Key: ASTERISK-27166
>                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-27166
>             Project: Asterisk
>          Issue Type: Bug
>      Security Level: None
>          Components: Applications/app_queue
>    Affects Versions: 13.17.0, 14.6.0
>         Environment: Linux Slackware 14.2
> Kernel 4.4.14
> Intel(R) Xeon(R) CPU E3-1220
> 8Gb Ram
> SATA HD
>            Reporter: Mario Lenis
>            Assignee: Unassigned
>
> This is the scenario:
> 1. Call enters to a Queue A and is received by Agent A (chan_sip)
> 2. Agent A executes an attended transfer to a Queue B and hangs up before someone answers.
> 3. The trasnfered call is not answered since Queue B has callback agents and none answers.
> 4. The attended transfer fails (beeperr) but the original channel had been optimized.
> 5. Asterisk stops.
> This is the backtrace of the issue.
> [http://kerberus.com.co/core/core.kerberus-2017-07-31T08-40-49-0500-brief.txt]
> [http://kerberus.com.co/core/core.kerberus-2017-07-31T08-40-49-0500-full.txt]
> [http://kerberus.com.co/core/core.kerberus-2017-07-31T08-40-49-0500-thread1.txt]



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



More information about the asterisk-bugs mailing list