You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Fulvio Cavarretta (Jira)" <ji...@apache.org> on 2019/12/23 10:34:00 UTC

[jira] [Updated] (SSHD-961) Not all messages are correctly handled in port forwarding mode

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

Fulvio Cavarretta updated SSHD-961:
-----------------------------------
    Summary: Not all messages are correctly handled in port forwarding mode  (was: Not alla messages correctly handled in port forwarding mode)

> Not all messages are correctly handled in port forwarding mode
> --------------------------------------------------------------
>
>                 Key: SSHD-961
>                 URL: https://issues.apache.org/jira/browse/SSHD-961
>             Project: MINA SSHD
>          Issue Type: Bug
>    Affects Versions: 2.3.1
>            Reporter: Fulvio Cavarretta
>            Priority: Major
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> There are some race conditions so that in port forwarding mode, not all messages are correctly managed during connections phase, leading to starvation.
>  
> The problem is caused in 
> {noformat}
> DefaultForwardingFilter.messageReceived{noformat}
>  where
> {code:java}
>             OpenFuture future = channel.getOpenFuture();
>             Consumer<Throwable> errHandler = future.isOpened() ? null : e -> {
>                 try {
>                     exceptionCaught(session, e);
>                 } catch (Exception err) {
>                     log.warn("messageReceived({}) failed ({}) to signal {}[{}] on channel={}: {}",
>                         session, err.getClass().getSimpleName(), e.getClass().getSimpleName(),
>                         e.getMessage(), channel, err.getMessage());
>                 }
>             };
>             ClientChannelPendingMessagesQueue messagesQueue = channel.getPendingMessagesQueue();
> {code}
> should be 
> {code:java}
>             ClientChannelPendingMessagesQueue messagesQueue = channel.getPendingMessagesQueue();
>             
>             OpenFuture future = messagesQueue.getCompletedFuture();
>             Consumer<Throwable> errHandler = future.isOpened() ? null : e -> {
>                 try {
>                     exceptionCaught(session, e);
>                 } catch (Exception err) {
>                     log.warn("messageReceived({}) failed ({}) to signal {}[{}] on channel={}: {}",
>                         session, err.getClass().getSimpleName(), e.getClass().getSimpleName(),
>                         e.getMessage(), channel, err.getMessage());
>                 }
>             };
> {code}
> Because since the ClientChannelPendingMessagesQueue is a listener of the channel's OpenFuture, this latter can be in open state but the ClientChannelPendingMessagesQueue's completed feature still not, so that messages won't be correctly handled 
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@mina.apache.org
For additional commands, e-mail: dev-help@mina.apache.org