Chris,
Take a look at the compareAndSet and getAndSet methods of AtomicBoolean;
they use "compare and swap" or CAS and you should never run into a
situation where a value is mishandled due to the nature of CAS using a
single CPU operation.


Paul

On Thu, Jul 27, 2017 at 8:13 AM Christoph John <christoph.j...@macd.com>
wrote:

>
>
> On 27/07/17 10:56, Emmanuel Lécharny wrote:
> > Le 27/07/2017 à 10:25, Christoph John a écrit :
> >> One question that comes to my mind after looking at our code: there is
> >> a Boolean attribute get/set on the IoSession in various places
> >> (SessionConnector.QFJ_RESET_IO_CONNECTOR). We get/set this from
> >> different locations and threads. But we neither synchronize on the
> >> IoSession nor the get/set of the attribute. So IMHO it could happen
> >> that the attribute is set to a different value than actually expected,
> >> triggering unexpected behaviour.
> >> I only searched briefly but could not find anything in the MINA code
> >> that makes getting/setting the attribute thread-safe.
> > Attributes within a session are not protected : it's up to you to make
> > sure they are not modified concurently. Now, for a boolean, using an
> > AtomicBoolean would certainly help.
> OK, but to make sure that every thread works with the same value of the
> attribute I need to
> synchronize the get/set, correct? Even if I put an AtomicBoolean there, it
> could happen that one
> thread does not "see" it immediately.
> But that only as a side note. I have tested it even with synchronization
> and the behaviour stays the
> same. So the error must be somewhere else in the code.
>
> I have now a test which tries to connect several FIX sessions with enabled
> SSL filter. The
> connection is established and then dropped because of an
> SSLHandshakeException. This is done for
> about a minute and leads to the mentioned problem with the connectors
> hanging in dispose.
> When I change the test to not use SSL I can see no "old" connectors
> hanging around. Is there
> something that I must specifically do when using the SSL filter? E.g. when
> there is an exception
> caught? First destroy all filters in the chain and then close the session?
>
> Thanks,
> Chris.
>
>
>
>
> --
> Christoph John
> Development & Support
> Direct: +49 241 557080-28 <+49%20241%2055708028>
> Mailto:christoph.j...@macd.com
>
>
>
> http://www.macd.com <http://www.macd.com/>
>
> ----------------------------------------------------------------------------------------------------
>
>
> ----------------------------------------------------------------------------------------------------
> MACD GmbH
> Oppenhoffallee 103
> D-52066 Aachen
> Tel: +49 241 557080-0 | Fax: +49 241 557080-10 <+49%20241%2055708010>
>          Amtsgericht Aachen: HRB 8151
> Ust.-Id: DE 813021663
>
> Geschäftsführer: George Macdonald
>
> ----------------------------------------------------------------------------------------------------
>
>
> ----------------------------------------------------------------------------------------------------
>
> take care of the environment - print only if necessary
>

Reply via email to