Oh I understand that you didn't specifically target the issue. I was just
hoping that it was a 'collateral damage' of a large refactor =P.

I also agree 100% with your comment about removing synchronization and I
double that if we are talking about global variables.

Thanks for hearing me out,
takeshi

On Thu, Jan 20, 2022 at 5:04 PM Justin Bertram <jbert...@apache.org> wrote:

> To be clear, I didn't expect my PR to resolve the issue. My point simply
> was that it's a large change, and I don't want to have to resolve the
> conflicts that may arise from fixing the deadlock before the PR is merged.
>
> In my opinion, all the synchronization around the session state is not
> ideal. I'd like to find a way to refactor it completely to employ something
> more elegant.
>
>
> Justin
>
> On Thu, Jan 20, 2022 at 1:32 PM Takeshi Fukushima <takesh...@gmail.com>
> wrote:
>
> > Hi Justin
> >
> > I realize that my fix is not the best, I just don't know the codebase
> well
> > enough to do a better job. That said, the methods that I've marked as
> > synchronized (MQTTConnectionManager connect and disconnect) already
> > synchronize themselves on the session state, but the disconnect method
> > synchronizes on the sessionState, which might get swapped before it has a
> > chance to call (synchronized) MQTTSession.stop (which in turn, calls the
> > synchronized MQTTSession.clear but on a different instance of the
> session).
> > On top of that, since a freshly created MQTTSession uses a global
> > MQTTSessionState to begin with (and some methods synchronizes over the
> > state), I think this causes more (unintended) contention and may be
> another
> > source of deadlocks.
> >
> > I've looked at your PR and, unfortunately, the issue still remains as far
> > as I can tell. I will be happy to help if you need anything and I will do
> > my best to create a testcase that can at least sometimes reproduce the
> > problem (which unfortunately depends all too much on the thread
> scheduling
> > order).
> >
> > Thanks for the response,
> > takeshi
> >
> > On Thu, Jan 20, 2022 at 4:09 PM Justin Bertram <jbert...@apache.org>
> > wrote:
> >
> > > Making a method synchronized typically isn't the preferred solution to
> > > concurrency issues due to the performance penalty it typically imposes.
> > > Generally targeted locks are better. However, concurrency issues are
> > often
> > > quite difficult to diagnose and resolve so sometimes a less-than-ideal
> > > solution is better than broken code.
> > >
> > > I currently have a large PR [1] for MQTT 5 support that is yet to be
> > > merged. Once that is merged I'll take a closer look at the deadlock
> issue
> > > from ARTEMIS-3622 that you reported.
> > >
> > >
> > > Justin
> > >
> > > [1] https://github.com/apache/activemq-artemis/pull/3907
> > >
> > > On Thu, Jan 20, 2022 at 11:08 AM Takeshi Fukushima <
> takesh...@gmail.com>
> > > wrote:
> > >
> > > > Hello everyone
> > > >
> > > > Last month I've opened up a ticket regarding a deadlock that was
> > > occurring
> > > > on one of our servers.
> > > > https://issues.apache.org/jira/browse/ARTEMIS-3622
> > > >
> > > > After much trial and error, I think I've narrowed it down the cause
> and
> > > > it's in the comments, but being a racing condition I cannot reliably
> > > > reproduce in a test case. I can reproduce manually (carefully
> advancing
> > > the
> > > > threads in the debugger).
> > > >
> > > > I also did patch our server with the quickfix indicated in the
> comments
> > > and
> > > > I will let you know if that fixes the problem (so far so good, but
> its
> > > been
> > > > only about 18 hours). If everything goes well, I will create a PR
> but I
> > > > would like to know if a simple solution like that (marking a couple
> of
> > > > methods as synchronized) would be acceptable, even though I think it
> > > > doesn't fixes all the cases (that one would require much in depth
> > > changes I
> > > > think).
> > > >
> > > > Thanks for the great software anyway,
> > > > takeshi
> > > >
> > > > --
> > > > http://mapsdev.blogspot.com/
> > > > Marcelo Takeshi Fukushima
> > > >
> > >
> >
> >
> > --
> > http://mapsdev.blogspot.com/
> > Marcelo Takeshi Fukushima
> >
>


-- 
http://mapsdev.blogspot.com/
Marcelo Takeshi Fukushima

Reply via email to