Hi Emmanuel,
Any help would be greatly appreciated.
------------------------------------------
M.V.S.Kishore
91-9886412814
On Thu, 28 Dec 2023 at 13:34, Kishore Mokkarala <[email protected]
<mailto:[email protected]>> wrote:
Thanks Emmanuel,I appreciate your quick response. I have one quick
question as you said "*finish_handshake method will prob-pagate the
Session_secured event to the IoHandler"* how to incorporate this
code in my state machine code ?
Currently we are on mina 2.2.1 code. Also i am sharing some sudo
code too.
public class G10MinaClient {
private final G10CaptureProcessor captureProcessor;
public G10MinaClient(final G10CaptureProcessor captureProcessor) {
this.captureProcessor = captureProcessor;
}
/**
* This method is called when a new session is created.
*
* @param context Context for this state machine session.
* @param session The current IO session.
*/
@IoHandlerTransition(on = SESSION_CREATED, in = CONNECTED)
public void create(final G10StateContext context, final
IoSession session) {
captureProcessor.sessionCreated(context, session);
}
@IoHandlerTransition(on = SESSION_CLOSED, in = OPENED)
public void sessionClose(final G10StateContext context, final
IoSession session) {
captureProcessor.sessionClosed(context, session, false);
}
@IoHandlerTransition(on = SESSION_OPENED, in = CONNECTED)
public void connect(final G10StateContext context, final
IoSession session) {
//This will write data on to SSL socket
//Here how to check hand shake is over or not ?
captureProcessor.verifyAndSendStartMsgs(context, session);
}
}
*State machine,IO handler and Filter Chain creation:*
*
*
StateMachine stateMachine =
StateMachineFactory.getInstance(IoHandlerTransition.class).create(
G10MinaClient.CONNECTED, new G10MinaClient(processor));
IoHandler ioHandler = new
StateMachineProxyBuilder().setStateContextLookup(
new IoSessionStateContextLookup(new
StateContextFactory() {
@Override
public StateContext create() {
final G10StateContext stateContext = new
G10StateContext();
stateContext.setStartedTime(new Date());
LOG.info("G10StateContext initialized at:{}
",System.currentTimeMillis());
return stateContext;
}
})).create(IoHandler.class, stateMachine);
NioSocketConnector connector = new NioSocketConnector();
connector.getFilterChain().addLast("LoggingFilter",
G10CaptureService.loggingFilter);
connector.getFilterChain().addLast("codecFilter",
G10CaptureService.probeCodecFilter);
connector.getFilterChain().addLast("executorFilter",
G10CaptureService.executorFilter);
connector.getFilterChain().addLast("gpbMessageFilter",
G10CaptureService.gpbMessageFilter);
connector.getFilterChain().addLast("keepAliveFilter",
G10CaptureService.keepAliveFilter);
SslFilter sslFilter;
try {
SSLContext sslContext = TLSUtil.getSSLContext();
sslFilter = new CustomSslFilter(sslContext);
connector.getFilterChain().addFirst("sslFilter", sslFilter);
} catch (Exception e) {
e.printStackTrace();
LOG.error("Exception during creating SSL context..." +
XError.getStackTrace(e));
}
connector.setHandler(ioHandler);*
*
*
*
------------------------------------------
M.V.S.Kishore
On Thu, 28 Dec 2023 at 04:29, Emmanuel Lécharny <[email protected]
<mailto:[email protected]>> wrote:
Hi,
what I can see from the 2 blocked threads is that one his
holding a lock
on the SM context, then tries to write something over a TLS
connection,
while the other receives something through the TLS connection,
and tries
to process a SM event.
There is a clear inter-blockage, with thread 1 doing:
- hold lock on the SSLHandlerG0 instance in the finish_handshake
function (which is synchronized)
- get a lock on the SM context
and thread 2 doing:
- hold a lock on the SM contect
- and tries to get a lock on the SSLHandlerG0 instance to write
something that is generated in the verifyAndSendStartMsgs function.
The finish_handshake method will prob-pagate the Session_secured
event
to the IoHandler, and I think it's a good idea to handle it before
trying to write anything. That means you need to avoid writing
anything
until the session_secured event has been handled.
I wonder if the verifyAndSendStartMsgs should not be sent in
session-secured event rather than in the session-opened...
On 27/12/2023 17:30, Kishore Mokkarala wrote:
> Hi Emmanuel,
>
> You can use the attached thread dump to analyze.hope it will
load.This
> is generated using jstack.
> ------------------------------------------
> M.V.S.Kishore
> Lead Dev Engineer
> NetScout S/w Pvt. Ltd.
> 91-9886412814
>
>
> On Wed, 27 Dec 2023 at 14:47, Kishore Mokkarala
<[email protected] <mailto:[email protected]>
> <mailto:[email protected]
<mailto:[email protected]>>> wrote:
>
> Here is the thread dump.
>
> Regards,
> ------------------------------------------
> M.V.S.Kishore
> 91-9886412814
>
>
> On Wed, 27 Dec 2023 at 10:59, Kishore Mokkarala
> <[email protected] <mailto:[email protected]>
<mailto:[email protected] <mailto:[email protected]>>>
wrote:
>
> We cannot share the source code,i have tried with
latest Mina
> version 2.2.3 also,this is also not working.Dead lock is
> happening.Our Organization won't allow to share the
source
> code.I am sure there is an issue with the state
machine and
> Apache mina SSL used together.Please let me know how
to proceed
> on this further ? i am open to zoom or webex call .
>
> Thanks & Regards,
> M.V.S.Kishore
> 91-9886412814
>
>
> On Sun, 24 Dec 2023 at 08:06, Emmanuel Lécharny
> <[email protected] <mailto:[email protected]>
<mailto:[email protected] <mailto:[email protected]>>> wrote:
>
> Can you provide the code you use that is related
to the
> StateMachine usage?
>
> On 24/12/2023 03:22, Emmanuel Lécharny wrote:
> > Hi,
> >
> > the problem is most certainly in the
StateMachine part. I
> have to see
> > what it does.
> >
> > On 22/12/2023 17:13, Kishore Mokkarala wrote:
> >> *Hi Emmanuel,*
> >> *
> >> *
> >> *Deadlock is happening in the 3rd party
jars,not within
> the code,which
> >> is out of the scope of the business logic.
When large
> data is being
> >> transferred between two entities with
parallel TCP ip
> connections
> >> **over SSL connection.** This is happening *
> >> *Could you please provide a work around this
problem,we
> are kind of
> >> stuck now in the production.*
> >> *Currently we are using mina version 2.2.1.*
> >> *
> >> *
> >> *StateMachine.java:138*
> >>
> >> *public* *void* handle(Event
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/event/Event.html#Event <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/event/Event.html#Event> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/event/Event.html#Event <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/event/Event.html#Event>>> event) {
> >> 136
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L136 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L136> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L136 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L136>>> StateContext <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/context/StateContext.html#StateContext <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/context/StateContext.html#StateContext> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/context/StateContext.html#StateContext <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/context/StateContext.html#StateContext>>> context = event.getContext();
> >> 137
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L137 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L137> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L137 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L137>>> 138 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L138 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L138> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L138 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L138>>> *synchronized (context) {*
> >> 139
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L139 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L139> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L139 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L139>>> LinkedList<Event> eventQueue = eventQueueThreadLocal.get();
> >> 140
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L140 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L140> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L140 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L140>>> eventQueue.addLast(event);
> >> 141
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L141 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L141> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L141 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L141>>> 142 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L142 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L142> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L142 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L142>>> *if* (processingThreadLocal.get()) {
> >> 143
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L143 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L143> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L143 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L143>>> //*/
> >> 144
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L144 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L144> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L144 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L144>>> /* This thread is already processing an event. Queue this /
> >> 145
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L145 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L145> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L145 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L145>>> /* event./
> >> 146
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L146 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L146> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L146 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L146>>> /*//
> >> 147
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L147 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L147> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L147 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L147>>> *if* (LOGGER.isDebugEnabled()) {
> >> 148
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L148 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L148> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L148 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L148>>> LOGGER.debug("State machine called recursively. Queuing event k{} for later processing.", event);
> >> 149
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L149 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L149> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L149 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L149>>> }
> >> 150
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L150 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L150> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L150 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L150>>> }*else* {
> >> 151
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L151 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L151> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L151 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L151>>> processingThreadLocal.set(*true*);
> >> 152
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L152 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L152> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L152 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L152>>> 153 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L153 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L153> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L153 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L153>>> *try* {
> >> 154
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L154 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L154> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L154 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L154>>> *if* (context.getCurrentState() ==*null*) {
> >> 155
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L155 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L155> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L155 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L155>>> context.setCurrentState(startState);
> >> 156
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L156 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L156> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L156 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L156>>> }
> >> 157
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L157 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L157> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L157 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L157>>> 158 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L158 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L158> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L158 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L158>>> processEvents(eventQueue);
> >> 159
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L159 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L159> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L159 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L159>>> }*finally* {
> >> 160
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L160 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L160> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L160 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L160>>> processingThreadLocal.set(false);
> >> 161
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L161 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L161> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L161 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L161>>> }
> >> 162
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L162 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L162> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L162 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L162>>> }
> >> 163
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L163 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L163> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L163 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L163>>> }
> >> 164
> >>
>
<https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L164 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L164> <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L164 <https://nightlies.apache.org/mina/mina/2.0.24/xref/org/apache/mina/statemachine/StateMachine.html#L164>>> }
> >>
> >> *
> >> *
> >> * at
> >>
>
org.apache.mina.filter.ssl.SSLHandlerG0.write(SSLHandlerG0.java:312)*
> >> *
> >> *
> >> *SSLHandlerG0.java:*
> >> synchronized public void write(NextFilter next,
> WriteRequest request)
> >> throws SSLException, WriteRejectedException {
> >> if (LOGGER.isDebugEnabled()) {
> >> LOGGER.debug("{} write() -
source {}",
> toString(), request);
> >> }*
> >> *
> >> ........................
> >> ..........................
> >> }
> >>
> >>
> >>
> >> ------------------------------------------
> >> M.V.S.Kishore
> >> Lead Dev Engineer
> >> NetScout S/w Pvt. Ltd.
> >> 91-9886412814
> >>
> >>
> >> On Fri, 22 Dec 2023 at 20:10, Kishore Mokkarala
> <[email protected]
<mailto:[email protected]> <mailto:[email protected]
<mailto:[email protected]>>
> >> <mailto:[email protected]
<mailto:[email protected]>
> <mailto:[email protected]
<mailto:[email protected]>>>> wrote:
> >>
> >> 1.
> >> Is the below issue fixed ?
> >> 1. DIRMINA-604
> >>
<https://issues.apache.org/jira/browse/DIRMINA-604
<https://issues.apache.org/jira/browse/DIRMINA-604>
>
<https://issues.apache.org/jira/browse/DIRMINA-604
<https://issues.apache.org/jira/browse/DIRMINA-604>>>
> >> Deadlock occurs when implementing
two mina
> StateMachine
> >>
> >> ------------------------------------------
> >> M.V.S.Kishore
> >> Lead Dev Engineer
> >> NetScout S/w Pvt. Ltd.
> >> 91-9886412814
> >>
> >>
> >> On Fri, 22 Dec 2023 at 13:04, Emmanuel
Lécharny
> <[email protected] <mailto:[email protected]>
<mailto:[email protected] <mailto:[email protected]>>
> >> <mailto:[email protected]
<mailto:[email protected]>
> <mailto:[email protected]
<mailto:[email protected]>>>> wrote:
> >>
> >> Hi,
> >>
> >> you have a deadlock on
0x00007f5c9f001408, which
> is in
> >>
>
com.netscout.nsaapp.geo.minaG10Proto.server.G10StateContext.
> >>
> >>
> >>
> >> On 22/12/2023 08:10, Kishore
Mokkarala wrote:
> >> > Hi Emmanuel,
> >> >
> >> > We are facing deadlock in
production with
> mina 2.2.1
> >> version,earlier it
> >> > was on 2.0.21, After upgrade only
we are
> seeing this
> >> issue,kindly please
> >> > provide an update any similar kind
issue is
> fixed in 2.2.3 or
> >> not ?
> >> >
> >> >
> >> > Thread pool-123-thread-3 is in
deadlock with
> thread
> >> NioProcessor-37
> >> >
> >> >
> >> > pool-123-thread-3
> >> >
> >> > PRIORITY : 5
> >> >
> >> > THREAD ID : 0X00007F5978002870
> >> >
> >> > NATIVE ID : 0X7C15
> >> >
> >> > NATIVE ID (DECIMAL) : 31765
> >> >
> >> > STATE : BLOCKED
> >> >
> >> >
> >> > stackTrace:
> >> > java.lang.Thread.State: BLOCKED
(on object
> monitor)
> >> > at
> >>
> >>
>
org.apache.mina.filter.ssl.SSLHandlerG0.write(SSLHandlerG0.java:312)
> >> > - waiting to lock
<0x00007f5c9f001168> (a
> >> >
org.apache.mina.filter.ssl.SSLHandlerG0)
> >> > at
> >>
> >>
>
org.apache.mina.filter.ssl.SslFilter.filterWrite(SslFilter.java:380)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:49)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:1146)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.IoFilterAdapter.filterWrite(IoFilterAdapter.java:138)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:49)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:1146)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:332)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:49)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:1146)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.filter.executor.ExecutorFilter.filterWrite(ExecutorFilter.java:595)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:49)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:1146)
> >> > at
> >> >
> >>
> >>
>
com.netscout.nsaapp.geo.minaG10Proto.server.G10GPBMessageIoFilter.filterWrite(G10GPBMessageIoFilter.java:63)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:49)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:1146)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.IoFilterAdapter.filterWrite(IoFilterAdapter.java:138)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:49)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:1146)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.IoFilterAdapter.filterWrite(IoFilterAdapter.java:138)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.fireFilterWrite(DefaultIoFilterChain.java:746)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:575)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:520)
> >> > at
> >> >
> >>
> >>
>
com.netscout.nsaapp.geo.g10Plugin.g10.processor.G10PluginCaptureProcessor.verifyAndSendStartMsgs(G10PluginCaptureProcessor.java:2627)
> >> > at
> >> >
> >>
> >>
>
com.netscout.nsaapp.geo.g10Plugin.g10.processor.G10PluginCaptureProcessor.sessionConnected(G10PluginCaptureProcessor.java:2552)
> >> > at
> >> >
> >>
> >>
>
com.netscout.nsaapp.geo.minaG10Proto.server.G10MinaClient.connect(G10MinaClient.java:220)
> >> > at
> >>
>
jdk.internal.reflect.GeneratedMethodAccessor144.invoke(Unknown
> >> Source)
> >> > at
> >> >
> >>
> >>
>
jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke([email protected]/DelegatingMethodAccessorImpl.java:43)
> >> > at
> >>
>
java.lang.reflect.Method.invoke([email protected]/Method.java:568)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.statemachine.transition.MethodTransition.invokeMethod(MethodTransition.java:281)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.statemachine.transition.MethodTransition.doExecute(MethodTransition.java:232)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.statemachine.transition.AbstractTransition.execute(AbstractTransition.java:100)
> >> > at
> >>
> >>
>
org.apache.mina.statemachine.StateMachine.handle(StateMachine.java:183)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.statemachine.StateMachine.processEvents(StateMachine.java:170)
> >> > at
> >>
> >>
>
org.apache.mina.statemachine.StateMachine.handle(StateMachine.java:158)
> >> > - locked <0x00007f5c9f001408> (a
> >> >
>
com.netscout.nsaapp.geo.minaG10Proto.server.G10StateContext)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.statemachine.StateMachineProxyBuilder$MethodInvocationHandler.invoke(StateMachineProxyBuilder.java:261)
> >> > at
> jdk.proxy4.$Proxy87.sessionOpened(jdk.proxy4/Unknown
> >> Source)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.sessionOpened(DefaultIoFilterChain.java:940)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionOpened(DefaultIoFilterChain.java:574)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$800(DefaultIoFilterChain.java:49)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.sessionOpened(DefaultIoFilterChain.java:1083)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.IoFilterAdapter.sessionOpened(IoFilterAdapter.java:90)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionOpened(DefaultIoFilterChain.java:574)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$800(DefaultIoFilterChain.java:49)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.sessionOpened(DefaultIoFilterChain.java:1083)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.IoFilterAdapter.sessionOpened(IoFilterAdapter.java:90)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionOpened(DefaultIoFilterChain.java:574)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$800(DefaultIoFilterChain.java:49)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.sessionOpened(DefaultIoFilterChain.java:1083)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:127)
> >> > at
>
org.apache.mina.core.session.IoEvent.run(IoEvent.java:89)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:763)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:755)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:695)
> >> > at
>
java.lang.Thread.run([email protected]/Thread.java:833)
> >> >
> >> >
> >> > NioProcessor-37
> >> >
> >> > PRIORITY : 5
> >> >
> >> > THREAD ID : 0X00007F5A040B5880
> >> >
> >> > NATIVE ID : 0X6D19
> >> >
> >> > NATIVE ID (DECIMAL) : 27929
> >> >
> >> > STATE : BLOCKED
> >> >
> >> >
> >> > stackTrace:
> >> > java.lang.Thread.State: BLOCKED
(on object
> monitor)
> >> > at
> >>
> >>
>
org.apache.mina.statemachine.StateMachine.handle(StateMachine.java:138)
> >> > - waiting to lock
<0x00007f5c9f001408> (a
> >> >
>
com.netscout.nsaapp.geo.minaG10Proto.server.G10StateContext)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.statemachine.StateMachineProxyBuilder$MethodInvocationHandler.invoke(StateMachineProxyBuilder.java:261)
> >> > at
> jdk.proxy4.$Proxy87.event(jdk.proxy4/Unknown Source)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.event(DefaultIoFilterChain.java:1039)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextFilterEvent(DefaultIoFilterChain.java:789)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1700(DefaultIoFilterChain.java:49)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.event(DefaultIoFilterChain.java:1164)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.IoFilterAdapter.event(IoFilterAdapter.java:162)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextFilterEvent(DefaultIoFilterChain.java:789)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1700(DefaultIoFilterChain.java:49)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.event(DefaultIoFilterChain.java:1164)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.IoFilterAdapter.event(IoFilterAdapter.java:162)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextFilterEvent(DefaultIoFilterChain.java:789)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1700(DefaultIoFilterChain.java:49)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.event(DefaultIoFilterChain.java:1164)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.IoFilterAdapter.event(IoFilterAdapter.java:162)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextFilterEvent(DefaultIoFilterChain.java:789)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1700(DefaultIoFilterChain.java:49)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.event(DefaultIoFilterChain.java:1164)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.IoFilterAdapter.event(IoFilterAdapter.java:162)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextFilterEvent(DefaultIoFilterChain.java:789)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1700(DefaultIoFilterChain.java:49)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.event(DefaultIoFilterChain.java:1164)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.IoFilterAdapter.event(IoFilterAdapter.java:162)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextFilterEvent(DefaultIoFilterChain.java:789)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1700(DefaultIoFilterChain.java:49)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.event(DefaultIoFilterChain.java:1164)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.filter.ssl.SSLHandlerG0.finish_handshake(SSLHandlerG0.java:589)
> >> > - locked <0x00007f5c9f001168> (a
> >> org.apache.mina.filter.ssl.SSLHandlerG0)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.filter.ssl.SSLHandlerG0.receive_loop(SSLHandlerG0.java:271)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.filter.ssl.SSLHandlerG0.receive_loop(SSLHandlerG0.java:246)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.filter.ssl.SSLHandlerG0.receive_loop(SSLHandlerG0.java:246)
> >> > at
> >>
> >>
>
org.apache.mina.filter.ssl.SSLHandlerG0.receive(SSLHandlerG0.java:162)
> >> > - locked <0x00007f5c9f001168> (a
> >> org.apache.mina.filter.ssl.SSLHandlerG0)
> >> > at
> >>
> >>
>
org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:342)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:49)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:1128)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:122)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:643)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:539)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.polling.AbstractPollingIoProcessor.access$1200(AbstractPollingIoProcessor.java:68)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.process(AbstractPollingIoProcessor.java:1224)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.process(AbstractPollingIoProcessor.java:1213)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:683)
> >> > at
> >> >
> >>
> >>
>
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
> >> > at
> >> >
> >>
> >>
>
java.util.concurrent.ThreadPoolExecutor.runWorker([email protected]/ThreadPoolExecutor.java:1136)
> >> > at
> >> >
> >>
> >>
>
java.util.concurrent.ThreadPoolExecutor$Worker.run([email protected]/ThreadPoolExecutor.java:635)
> >> > at
>
java.lang.Thread.run([email protected]/Thread.java:833)
> >> >
> >> > Regards,
> >> >
------------------------------------------
> >> > M.V.S.Kishore
> >> > Lead Dev Engineer
> >> > NetScout S/w Pvt. Ltd.
> >> > 91-9886412814
> >>
> >> -- *Emmanuel Lécharny* P. +33
(0)6 08 33
> 32 61
> >> [email protected]
<mailto:[email protected]> <mailto:[email protected]
<mailto:[email protected]>>
> <mailto:[email protected]
<mailto:[email protected]> <mailto:[email protected]
<mailto:[email protected]>>>
> >>
> >
>
> --
> *Emmanuel Lécharny* P. +33 (0)6 08 33 32 61
> [email protected] <mailto:[email protected]>
<mailto:[email protected] <mailto:[email protected]>>
>
--
*Emmanuel Lécharny* P. +33 (0)6 08 33 32 61
[email protected] <mailto:[email protected]>