[
https://issues.apache.org/jira/browse/DAFFODIL-2767?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Steve Lawrence reassigned DAFFODIL-2767:
----------------------------------------
Assignee: Steve Lawrence
> Mixed content with SAX unparsing hangs coroutine thread
> -------------------------------------------------------
>
> Key: DAFFODIL-2767
> URL: https://issues.apache.org/jira/browse/DAFFODIL-2767
> Project: Daffodil
> Issue Type: Bug
> Components: Back End, Unparsing
> Affects Versions: 3.4.0
> Reporter: Steve Lawrence
> Assignee: Steve Lawrence
> Priority: Major
> Fix For: 3.5.0
>
>
> When unparsing with the SAX API, we spawn a new thread and run the unparse()
> call in that using our custom coroutine implementation. The main SAX thread
> and the coroutine unparse thread() using an ArrayBlockingQueue to suspend
> execution of one subroutine while the other executes.
> However, if the main thread throws an exception then it leaves the corutine
> unparse() thread hung, blocked on the ArrayBlockingQueue.
> This is exactly what happens if there is mixed content in the infoset we are
> unparsing. If mixed content is detected in the DaffodilUnparseContentHander
> startElement function then, then we throw an exception that can be caught by
> the SAX API, but the unparse thread is still running and blocked.
> One option is to modify the startElement() function in the main thread to add
> state to a SAXEvent when it detects mixed content. When the unparse thread
> sees this state it can cause the unparse() thread to finish by throwing an
> exception. This will create an UnparseResult that eventually is passed back
> to the main thread and coroutine logic can finish.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)