Hi

Yeah the data format implementation of marshal / unmarshal should be
written in a thread-safe manner. So I think the current code in
univocity may be wrong, if it has some kind of shared state for some
headers.



On Fri, Jul 28, 2017 at 10:51 AM, Zoran Regvart <zo...@regvart.com> wrote:
> Hi Cameleers,
>
> -1
>
> not sure that was the correct solution, perhaps `headers` field of
> Marshaller needs to be treated as immutable. Hard to tell on such a
> rarely used component what was the initial intent of `headers` field,
> but I guess it's what all marshallers need to add, so mutating it on a
> per write seems wrong.
>
> Any thoughts?
>
> zoran
>
> On Fri, Jul 28, 2017 at 10:27 AM,  <ond...@apache.org> wrote:
>> Repository: camel
>> Updated Branches:
>>   refs/heads/master 6d0fdee12 -> 27d6c83ec
>>
>>
>> CAMEL-11609:thread-safety if headers get modified on the fly
>>
>>
>> Project: http://git-wip-us.apache.org/repos/asf/camel/repo
>> Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/27d6c83e
>> Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/27d6c83e
>> Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/27d6c83e
>>
>> Branch: refs/heads/master
>> Commit: 27d6c83ecd392168e59971f5de8e4ad258a1f461
>> Parents: 6d0fdee
>> Author: onders86 <ondersez...@gmail.com>
>> Authored: Thu Jul 27 23:54:18 2017 +0300
>> Committer: onders86 <ondersez...@gmail.com>
>> Committed: Fri Jul 28 11:27:06 2017 +0300
>>
>> ----------------------------------------------------------------------
>>  .../org/apache/camel/dataformat/univocity/Marshaller.java    | 8 ++++++--
>>  1 file changed, 6 insertions(+), 2 deletions(-)
>> ----------------------------------------------------------------------
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/27d6c83e/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Marshaller.java
>> ----------------------------------------------------------------------
>> diff --git 
>> a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Marshaller.java
>>  
>> b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Marshaller.java
>> index 5c113cb..e170c95 100644
>> --- 
>> a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Marshaller.java
>> +++ 
>> b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Marshaller.java
>> @@ -46,7 +46,9 @@ final class Marshaller<W extends AbstractWriter<?>> {
>>       */
>>      Marshaller(String[] headers, boolean adaptHeaders) {
>>          if (headers != null) {
>> -            this.headers.addAll(Arrays.asList(headers));
>> +            synchronized (this.headers) {
>> +                this.headers.addAll(Arrays.asList(headers));
>> +            }
>>          }
>>          this.adaptHeaders = adaptHeaders;
>>      }
>> @@ -86,7 +88,9 @@ final class Marshaller<W extends AbstractWriter<?>> {
>>          Map<?, ?> map = convertToMandatoryType(exchange, Map.class, row);
>>          if (adaptHeaders) {
>>              for (Object key : map.keySet()) {
>> -                headers.add(convertToMandatoryType(exchange, String.class, 
>> key));
>> +                synchronized (headers) {
>> +                    headers.add(convertToMandatoryType(exchange, 
>> String.class, key));
>> +                }
>>              }
>>          }
>>
>>
>
>
>
> --
> Zoran Regvart



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to