The issue is more global than anticipated: Whenever a caller is hanging up while Halef is speaking, Halef will crash in the next call (before even playing any prompt). Cairo throws
Exception in thread "RTPEventHandler" java.lang.NullPointerException
at org.speechforge.cairo.rtp.server.RTPStreamReplicator.streamInactive(RTPStreamReplicator.java:160)
at org.speechforge.cairo.rtp.RTPConsumer.update(RTPConsumer.java:265)
at com.sun.media.rtp.RTPEventHandler.processEvent(RTPEventHandler.java:62)
at com.sun.media.rtp.RTPEventHandler.dispatchEvents(RTPEventHandler.java:96)
at com.sun.media.rtp.RTPEventHandler.run(RTPEventHandler.java:115)
JVXML says [java] 2015-06-24 02:11:36,081 ERROR interpreter.JVoiceXmlSession [2055fc8a-c35d-4eae-a848-b71e89f0343b]: error processing application 'Unknown application' [java] org.jvoicexml.event.error.NoresourceError: error.noresource: Pool exhausted [java] at org.jvoicexml.implementation.pool.KeyedResourcePool.borrowObject(KeyedResourcePool.java:119) ~[classes/:?] [java] at org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform.getExternalResourceFromPool(JVoiceXmlImplementationPlatform.java:774) ~[classes/:?] [java] at org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform.getSystemOutput(JVoiceXmlImplementationPlatform.java:298) ~[classes/:?] [java] at org.jvoicexml.implementation.jvxml.JVoiceXmlPromptAccumulator.renderPrompts(JVoiceXmlPromptAccumulator.java:123) ~[classes/:?] [java] at org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform.renderPrompts(JVoiceXmlImplementationPlatform.java:1111) ~[classes/:?] [java] at org.jvoicexml.interpreter.FormInterpretationAlgorithm.queuePrompts(FormInterpretationAlgorithm.java:807) ~[classes/:?] [java] at org.jvoicexml.interpreter.FormInterpretationAlgorithm.collect(FormInterpretationAlgorithm.java:620) ~[classes/:?] [java] at org.jvoicexml.interpreter.FormInterpretationAlgorithm.mainLoop(FormInterpretationAlgorithm.java:432) ~[classes/:?] [java] at org.jvoicexml.interpreter.VoiceXmlInterpreter.process(VoiceXmlInterpreter.java:272) ~[classes/:?] [java] at org.jvoicexml.interpreter.VoiceXmlInterpreterContext.interpret(VoiceXmlInterpreterContext.java:798) ~[classes/:?] [java] at org.jvoicexml.interpreter.VoiceXmlInterpreterContext.process(VoiceXmlInterpreterContext.java:484) ~[classes/:?] [java] at org.jvoicexml.interpreter.JVoiceXmlSession.run(JVoiceXmlSession.java:328) [classes/:?] [java] Caused by: java.util.NoSuchElementException: Pool exhausted [java] at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1110) ~[commons-pool-1.6.jar:1.6] [java] at org.jvoicexml.implementation.pool.KeyedResourcePool.borrowObject(KeyedResourcePool.java:117) ~[classes/:?] [java] ... 11 more
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I tried hanging up on HALEF (ext. 7703) in the middle of the first question, but when I called in again after that, I had no problem going through the application. However, this time, when I hung up in the middle of a "PlayPrompt" block (this is what first plays when the call is redirected to the Random Number Generator application from the Peanuts application), that's when I encountered a NullPointer exception in Cairo:
So it might be the case that hanging up in the middle of a "Question" block (where the system is expecting a recognition hypothesis) when HALEF is speaking is okay, but doing the same thing in the middle of a "PlayPrompt" block (where only the TTS needs to do something) is not? Will have to look into this further...
Last edit: Vikram Ramanarayanan 2015-06-25
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I tried out two cases in the Kaldi streaming implementation:
-Hanging up when the system speaks and expects a response (first question)
-Hanging up when the system uses only playback after recognition took place
Both cases do NOT crash the system.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Okay, so I called into the system many times and stress-tested 3 hypotheses related to this problem, among many other cases:
The PlayPrompt block issue.
Something particular to the random number generator
Something that messes up if you transfer to another application via a Submit block.
And what I see is that this problem is most likely due to the first issue, i.e., a PlayPrompt block; this is not particular to the random number generator. Whenever you hang up in the middle of a PlayPrompt block, we get the Cairo and JVMXL error logs as above and the call gets disconnected (after transferring you to the extension, of course).
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
The issue is more global than anticipated: Whenever a caller is hanging up while Halef is speaking, Halef will crash in the next call (before even playing any prompt). Cairo throws
Exception in thread "RTPEventHandler" java.lang.NullPointerException
at org.speechforge.cairo.rtp.server.RTPStreamReplicator.streamInactive(RTPStreamReplicator.java:160)
at org.speechforge.cairo.rtp.RTPConsumer.update(RTPConsumer.java:265)
at com.sun.media.rtp.RTPEventHandler.processEvent(RTPEventHandler.java:62)
at com.sun.media.rtp.RTPEventHandler.dispatchEvents(RTPEventHandler.java:96)
at com.sun.media.rtp.RTPEventHandler.run(RTPEventHandler.java:115)
JVXML says
[java] 2015-06-24 02:11:36,081 ERROR interpreter.JVoiceXmlSession [2055fc8a-c35d-4eae-a848-b71e89f0343b]: error processing application 'Unknown application'
[java] org.jvoicexml.event.error.NoresourceError: error.noresource: Pool exhausted
[java] at org.jvoicexml.implementation.pool.KeyedResourcePool.borrowObject(KeyedResourcePool.java:119) ~[classes/:?]
[java] at org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform.getExternalResourceFromPool(JVoiceXmlImplementationPlatform.java:774) ~[classes/:?]
[java] at org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform.getSystemOutput(JVoiceXmlImplementationPlatform.java:298) ~[classes/:?]
[java] at org.jvoicexml.implementation.jvxml.JVoiceXmlPromptAccumulator.renderPrompts(JVoiceXmlPromptAccumulator.java:123) ~[classes/:?]
[java] at org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform.renderPrompts(JVoiceXmlImplementationPlatform.java:1111) ~[classes/:?]
[java] at org.jvoicexml.interpreter.FormInterpretationAlgorithm.queuePrompts(FormInterpretationAlgorithm.java:807) ~[classes/:?]
[java] at org.jvoicexml.interpreter.FormInterpretationAlgorithm.collect(FormInterpretationAlgorithm.java:620) ~[classes/:?]
[java] at org.jvoicexml.interpreter.FormInterpretationAlgorithm.mainLoop(FormInterpretationAlgorithm.java:432) ~[classes/:?]
[java] at org.jvoicexml.interpreter.VoiceXmlInterpreter.process(VoiceXmlInterpreter.java:272) ~[classes/:?]
[java] at org.jvoicexml.interpreter.VoiceXmlInterpreterContext.interpret(VoiceXmlInterpreterContext.java:798) ~[classes/:?]
[java] at org.jvoicexml.interpreter.VoiceXmlInterpreterContext.process(VoiceXmlInterpreterContext.java:484) ~[classes/:?]
[java] at org.jvoicexml.interpreter.JVoiceXmlSession.run(JVoiceXmlSession.java:328) [classes/:?]
[java] Caused by: java.util.NoSuchElementException: Pool exhausted
[java] at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1110) ~[commons-pool-1.6.jar:1.6]
[java] at org.jvoicexml.implementation.pool.KeyedResourcePool.borrowObject(KeyedResourcePool.java:117) ~[classes/:?]
[java] ... 11 more
This is how the end of a successfull call should look in cairo.
2015-06-24 03:49:36,816 INFO ~.~.~.~.SipListenerImpl [EventScannerThread]: Got a dialog terminated event
2015-06-24 03:49:39,170 DEBUG ~.~.~.~.RTPConsumer [RTPEventHandler]: ReceiveStreamEvent received: javax.media.rtp.event.InactiveReceiveStreamEvent[source = RTPManager
SSRCCache com.sun.media.rtp.SSRCCache@11ac3cb6
Dataport 42050
Controlport 42051
Address 141.31.8.71
RTPForwarder com.sun.media.rtp.util.PacketForwarder@42c5d9ca
RTPDemux com.sun.media.rtp.RTPDemultiplexer@4b5d7f05]
2015-06-24 03:50:00,768 DEBUG ~.~.~.~.SipListenerImpl [EventScannerThread]: Got a transaction terminated event
I tried hanging up on HALEF (ext. 7703) in the middle of the first question, but when I called in again after that, I had no problem going through the application. However, this time, when I hung up in the middle of a "PlayPrompt" block (this is what first plays when the call is redirected to the Random Number Generator application from the Peanuts application), that's when I encountered a NullPointer exception in Cairo:
2015-06-25 20:51:43,861 DEBUG ~.~.~.~.SipListenerImpl [EventScannerThread]: Got a transaction terminated event
2015-06-25 20:51:50,561 DEBUG ~.~.~.~.RTPConsumer [RTPEventHandler]: ReceiveStreamEvent received: javax.media.rtp.event.InactiveReceiveStreamEvent[source = RTPManager
SSRCCache com.sun.media.rtp.SSRCCache@2062f62f
Dataport 42050
Controlport 42051
Address 141.31.8.60
RTPForwarder com.sun.media.rtp.util.PacketForwarder@41109845
RTPDemux com.sun.media.rtp.RTPDemultiplexer@287cfb62]
2015-06-25 20:51:50,571 DEBUG ~.~.~.~.~.RTPStreamReplicator [RTPEventHandler]: Closing RTP processor for SSRC=799188930
2015-06-25 20:51:50,579 DEBUG ~.~.~.~.ProcessorStarter [JMF thread: SendEventQueue: com.sun.media.processor.unknown.Handler]: controllerUpdate(): ControllerEvent received: javax.media.StopEvent[source=com.sun.media.processor.unknown.Handler@5780b29a,previous=Started,current=Prefetched,target=Prefetched,mediaTime=javax.media.Time@18e0a18e]
Exception in thread "RTPEventHandler" java.lang.NullPointerException
at org.speechforge.cairo.rtp.server.RTPStreamReplicator.streamInactive(RTPStreamReplicator.java:160)
at org.speechforge.cairo.rtp.RTPConsumer.update(RTPConsumer.java:265)
at com.sun.media.rtp.RTPEventHandler.processEvent(RTPEventHandler.java:62)
at com.sun.media.rtp.RTPEventHandler.dispatchEvents(RTPEventHandler.java:96)
at com.sun.media.rtp.RTPEventHandler.run(RTPEventHandler.java:115)
2015-06-25 20:51:50,587 DEBUG ~.~.~.~.ProcessorStarter [JMF thread: SendEventQueue: com.sun.media.processor.unknown.Handler]: controllerUpdate(): ControllerEvent received: javax.media.ControllerClosedEvent[source=com.sun.media.processor.unknown.Handler@5780b29a]
So it might be the case that hanging up in the middle of a "Question" block (where the system is expecting a recognition hypothesis) when HALEF is speaking is okay, but doing the same thing in the middle of a "PlayPrompt" block (where only the TTS needs to do something) is not? Will have to look into this further...
Last edit: Vikram Ramanarayanan 2015-06-25
I tried out two cases in the Kaldi streaming implementation:
-Hanging up when the system speaks and expects a response (first question)
-Hanging up when the system uses only playback after recognition took place
Both cases do NOT crash the system.
So the problem might be specific to the Sphinx JSGF implementation or to the specific call flow of the item in question.
Okay, so I called into the system many times and stress-tested 3 hypotheses related to this problem, among many other cases:
And what I see is that this problem is most likely due to the first issue, i.e., a PlayPrompt block; this is not particular to the random number generator. Whenever you hang up in the middle of a PlayPrompt block, we get the Cairo and JVMXL error logs as above and the call gets disconnected (after transferring you to the extension, of course).
It is a JVXML bug not a Cairo bug. JVXML is not closing the session and thus in the next call the resource is not available.
I think this is not related to the bug described in this ticket.
Opened a new bug for this.
Fixed by jvxml hack that prevents queuing of multiple tts prompts at the same time. Monitor if this resolved all related issues.