[ 
https://issues.apache.org/jira/browse/TIKA-2746?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Rohan Padhye updated TIKA-2746:
-------------------------------
    Summary: ParsingReader#throwable is shared across threads but not volatile  
(was: ParsingReader#throwable is not shared but not volatile)

> ParsingReader#throwable is shared across threads but not volatile
> -----------------------------------------------------------------
>
>                 Key: TIKA-2746
>                 URL: https://issues.apache.org/jira/browse/TIKA-2746
>             Project: Tika
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.19
>            Reporter: Rohan Padhye
>            Priority: Minor
>
> The field {{throwable}} in {{org.apache.tika.parser.ParsingReader}} is 
> modified by the background worker thread (in {{ParsingTask.run}}) and read by 
> the reader thread (in {{ParsingReader.read}}). However, the field is not 
> {{volatile}}, and no locks are used to protect its access, which means that 
> there is no guarantee about if and when the update to {{throwable}} by the 
> worker thread will be visible to the reader thread.
> This can technically lead to data races, stale reads, and a slew of other 
> non-deterministic behavior if the content handler throws an exception while 
> parsing.
>  
> As a side note: the {{throwable}} field is marked as transient. I do not see 
> why that is the case, given that the reader is not serializable. Is this just 
> a typo from an intended {{volatile}} modifier?
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to