Great analysis, thank you.

Could the test be better synchronized using a count down latch?

Gary

On Sun, Oct 13, 2024, 1:09 AM Emmanuel Lécharny <elecha...@gmail.com> wrote:

> AFAIU, when you fetch an ephemeral port with a new ServerSocket(0), what
> happens is that the address:port is in TIME_WAIT after the socket
> closure, but as it's also using SO_REUSEADDR, the process can use it,
> which guarantees it's available, and no other process can use it.
>
> You just need to be sure no other test is going to call the
> AvailablePortFinder.getNextAvailable() method.
>
> So I retract what I said about the lock being caused by the wrong port
> being used.
>
>
> I analysed further the test and the Mina code, and I found there is a
> race condition when using the read() command:
>
> - On one thread, we do write a message when the session is opened
> - On the other thread we set the session configuration UseReadOperation
> flag to true, then do a read.
>
>
> What happens - and I can reproduce the lock in debugging mode easily -
> is that the read is executed too late, the message being already
> propagated *before* the check for the UseReadOperation flag is switched
> to 'true', so when read() is called, there is nothing to be read.
>
> I can also reproduce the lock 100% by adding a Thread.sleep(10) before
> setting the session configuration to accept read operation:
>
>          try {
>              IoConnector connector = new NioSocketConnector();
>              connector.setHandler(new IoHandlerAdapter());
>              ConnectFuture connectFuture = connector.connect(new
> InetSocketAddress("localhost", port));
>              connectFuture.awaitUninterruptibly();
>
>              if (connectFuture.getException() != null) {
>                  throw connectFuture.getException();
>              }
>
>              Thread.sleep( 10 );
>
> connectFuture.getSession().getConfig().setUseReadOperation(true);
> ...
>
>
> To get it working with the sleep(10), it's enough to add a
> Thread.sleep(11) in the sessionOpened handler method:
>
>              @Override
>              public void sessionOpened(IoSession session) throws Exception
> {
>                  Thread.sleep( 11 );
> ...
>
> Bottom line, the test is flaky. We should never expect a read to succeed
> when the data being written are pushed by the sessionConnected()
> handler's method.
> There is no way we can get this fixed in MINA core code, because the
> session only exists when it's opened, so too late for a configuration to
> be injected in time - unless we are lucky - for it to be taken in
> consideration when trying to do a read() on the client side.
>
> In other words, this feature is badly designed. We should either
> configure it when we create the server, so that it's available when the
> session is created, or expect the user not to write anything in the
> sessionOpened/sessionCreated handler's methods and assume that it will
> be available on the client immediately...
>
> I'll create a ticket for that issue. In the mean time, I don't think
> it's a blocker for a release, because it's also present in every version
> of MINA :/
>
>
> On 12/10/2024 22:36, Gary Gregory wrote:
> > What I've done elsewhere (mostly at work) is to configure the main code
> > (like a server) to accept port 0 from a test, instead of a "free"
> > discovered port. This port ends up being used by a ServerSocket
> > constructor or equivalent SSL class. The main class under test needs to
> > have a getPort() method or methods depending on how deeply buried the
> > server socket is, that queries the allocated ServerSocket. The test can
> > then query the main code after it knows the socket is bound.
> >
> > HTH,
> > Gary
> >
> > On Sat, Oct 12, 2024, 3:16 PM Guillaume Nodet <gno...@apache.org
> > <mailto:gno...@apache.org>> wrote:
> >
> >
> >
> >     Le sam. 12 oct. 2024 à 06:24, Emmanuel Lécharny <elecha...@gmail.com
> >     <mailto:elecha...@gmail.com>> a écrit :
> >
> >         Indeed. But the point is that you can't fetch an available port
> >         and use
> >         it immediately and be sure it's not used by another process
> >         without some
> >         kind of global lock on your system...
> >
> >         I don't see any other way to grab an available port from the OS,
> >         and
> >         guarantee it's not used when you have to bind a socket on it and
> >         release
> >         it immediately for use by another socket.
> >
> >
> >     If you bind a server socket on port 0, the OS will allocate a free
> >     port. So just need to get the bound port and configure the client to
> >     use it ?
> >
> >         Back to the issue: can you grab a StackTrace to see exactly
> >         where it
> >         blocks, in case there is another issue?
> >
> >         Many thanks!
> >
> >         On 11/10/2024 13:59, Gary Gregory wrote:
> >          > But it's not really doing that because it's NOT using the
> >         allocated
> >          > ServerSocket. Once that method exists, any other process in
> the
> >          > underlying OS can grab that port for itself.
> >          >
> >          > Gary
> >          >
> >          > On Fri, Oct 11, 2024, 7:53 AM Emmanuel Lécharny
> >         <elecha...@gmail.com <mailto:elecha...@gmail.com>
> >          > <mailto:elecha...@gmail.com <mailto:elecha...@gmail.com>>>
> wrote:
> >          >
> >          >
> >          >
> >          >     On 11/10/2024 10:01, Gary Gregory wrote:
> >          >      > Hi Emanuel,
> >          >      >
> >          >      > Why not use ephemeral ports?
> >          >
> >          >     this is exactly what the
> >         AvailablePortFinder.getNextAvailable()
> >          >     method does:
> >          >
> >          >           public static int getNextAvailable() {
> >          >               try (ServerSocket serverSocket = new
> >         ServerSocket(0)){
> >          >                   // Here, we simply return an available port
> >         found by
> >          >     the system
> >          >                   return serverSocket.getLocalPort();
> >          >               } catch (IOException ioe) {
> >          >                   throw new
> >         NoSuchElementException(ioe.getMessage());
> >          >               }
> >          >
> >          >
> >          >     It might mean a bit of work update the
> >          >      > tests to query the port and then use it, but it seems
> >         less probe to
> >          >      > problems. I'll try again in a few hours.
> >          >      >
> >          >      > Gary
> >          >      >
> >          >      > On Thu, Oct 10, 2024, 10:17 PM Emmanuel Lécharny
> >          >     <elecha...@gmail.com <mailto:elecha...@gmail.com>
> >         <mailto:elecha...@gmail.com <mailto:elecha...@gmail.com>>
> >          >      > <mailto:elecha...@gmail.com
> >         <mailto:elecha...@gmail.com> <mailto:elecha...@gmail.com
> >         <mailto:elecha...@gmail.com>>>> wrote:
> >          >      >
> >          >      >     Thanks Gary!
> >          >      >
> >          >      >     DIRMINA777Test may fell due to some port collision
> >         (we use a
> >          >      >     AvailablePortFinder.getNextAvailable() call to
> >         find a port
> >          >     that the
> >          >      >     Acceptor can use, but as some other tests may run
> >          >     concurrently, the
> >          >      >     same
> >          >      >     port can be in use by another Acceptor, and the
> >         readFuture
> >          >     can wait
> >          >      >     forever because the IoHandler that responds to
> >         connection is
> >          >     not doing
> >          >      >     what is expected.
> >          >      >
> >          >      >     It's not perfect, and the only solution is to run
> >         the test
> >          >     another time.
> >          >      >
> >          >      >     Could you give it another try?
> >          >      >
> >          >      >     Side note: the
> >         AvailablePortFinder.getNextAvailable() method,
> >          >     which is
> >          >      >     only used for tests, should probably be
> >         syncrhonized to avoid
> >          >     being
> >          >      >     called by many threads at the same time.
> >          >      >
> >          >      >     Thanks!
> >          >      >
> >          >      >     On 10/10/2024 15:10, Gary Gregory wrote:
> >          >      >      > + 1 Release MINA 2.1.9
> >          >      >      >
> >          >      >      > Release MINA 2.0.26: Running
> >          >      >      > org.apache.mina.transport.socket.nio.x hangs or
> >         takes
> >          >      >      > forever, I killed it after 30 minutes.
> >          >      >      >
> >          >      >      > - Tested the src ZIPs
> >          >      >      > - ASCs OK
> >          >      >      > - SHA512 files are not machine verifiable with
> >         `shasum
> >          >     --check`
> >          >      >     due to
> >          >      >      > their incompatible format.
> >          >      >      > - mvn clean verify
> >          >      >      > - Using:
> >          >      >      > openjdk version "11.0.24" 2024-07-16
> >          >      >      > OpenJDK Runtime Environment Homebrew (build
> >         11.0.24+0)
> >          >      >      > OpenJDK 64-Bit Server VM Homebrew (build
> >         11.0.24+0, mixed
> >          >     mode)
> >          >      >      >
> >          >      >      > Apache Maven 3.9.9
> >         (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
> >          >      >      > Maven home:
> /usr/local/Cellar/maven/3.9.9/libexec
> >          >      >      > Java version: 11.0.24, vendor: Homebrew,
> runtime:
> >          >      >      >
> >          >      >
> >          >
> >           /usr/local/Cellar/openjdk@11
> /11.0.24/libexec/openjdk.jdk/Contents/Home
> >          >      >      > Default locale: en_US, platform encoding: UTF-8
> >          >      >      > OS name: "mac os x", version: "15.0.1", arch:
> >         "x86_64",
> >          >     family: "mac"
> >          >      >      >
> >          >      >      > Darwin **** 24.0.0 Darwin Kernel Version
> >         24.0.0: Tue Sep 24
> >          >      >     23:36:30 PDT
> >          >      >      > 2024; root:xnu-11215.1.12~1/RELEASE_X86_64
> x86_64
> >          >      >      >
> >          >      >      > Gary
> >          >      >      >
> >          >      >      >
> >          >      >      > On Wed, Oct 9, 2024 at 10:53 AM Emmanuel
> Lécharny
> >          >      >     <elecha...@gmail.com <mailto:elecha...@gmail.com>
> >         <mailto:elecha...@gmail.com <mailto:elecha...@gmail.com>>
> >          >     <mailto:elecha...@gmail.com <mailto:elecha...@gmail.com>
> >         <mailto:elecha...@gmail.com <mailto:elecha...@gmail.com>>>
> >          >      >      > <mailto:elecha...@gmail.com
> >         <mailto:elecha...@gmail.com> <mailto:elecha...@gmail.com
> >         <mailto:elecha...@gmail.com>>
> >          >     <mailto:elecha...@gmail.com <mailto:elecha...@gmail.com>
> >         <mailto:elecha...@gmail.com <mailto:elecha...@gmail.com>>>>>
> wrote:
> >          >      >      >
> >          >      >      >     Hi!
> >          >      >      >
> >          >      >      >     I have started this vote 9 days ago, still
> >         haven't get any
> >          >      >     vote yet...
> >          >      >      >
> >          >      >      >     On 30/09/2024 19:21, Emmanuel Lecharny
> wrote:
> >          >      >      >      > hi!
> >          >      >      >      >
> >          >      >      >      > WARNING: there are 2 votes to cast!
> >          >      >      >      >
> >          >      >      >      >
> >          >      >      >      > This is a vote for a double release:
> >          >      >      >      > * MINA 2.1.9
> >          >      >      >      > * MINA 2.0.26
> >          >      >      >      >
> >          >      >      >      > Those versions are a maintenance
> >         realase, fixing a
> >          >     bug in
> >          >      >     the way we
> >          >      >      >      > treat Strings when reading a IoBuffer:
> >          >      >      >      >
> >          >      >      >      > DIRMINA-1181:Exception thrown when
> >         attempting to decode
> >          >      >     certain
> >          >      >      >     UTF-16 chars
> >          >      >      >      >
> >          >      >      >      >
> >          >      >      >      >
> >          >      >      >      > Temporary tags have been created (they
> >         can be
> >          >     removed if
> >          >      >     the vote
> >          >      >      >     is not
> >          >      >      >      > approved) :
> >          >      >      >      >
> >          >      >      >      > * MINA 2.1.9:
> >          >      >      >      >
> >          >      >      >
> >          >      >
> >          >
> >
> https://github.com/apache/mina/commit/8df31da1597056b73f5d6dbf11c75ce13227ba60
> <
> https://github.com/apache/mina/commit/8df31da1597056b73f5d6dbf11c75ce13227ba60>
> <
> https://github.com/apache/mina/commit/8df31da1597056b73f5d6dbf11c75ce13227ba60
> <
> https://github.com/apache/mina/commit/8df31da1597056b73f5d6dbf11c75ce13227ba60>>
> <
> https://github.com/apache/mina/commit/8df31da1597056b73f5d6dbf11c75ce13227ba60
> <
> https://github.com/apache/mina/commit/8df31da1597056b73f5d6dbf11c75ce13227ba60>
> <
> https://github.com/apache/mina/commit/8df31da1597056b73f5d6dbf11c75ce13227ba60
> <
> https://github.com/apache/mina/commit/8df31da1597056b73f5d6dbf11c75ce13227ba60>>>
> <
> https://github.com/apache/mina/commit/8df31da1597056b73f5d6dbf11c75ce13227ba60
> <
> https://github.com/apache/mina/commit/8df31da1597056b73f5d6dbf11c75ce13227ba60>
> <
> https://github.com/apache/mina/commit/8df31da1597056b73f5d6dbf11c75ce13227ba60
> <
> https://github.com/apache/mina/commit/8df31da1597056b73f5d6dbf11c75ce13227ba60>>
> <
> https://github.com/apache/mina/commit/8df31da1597056b73f5d6dbf11c75ce13227ba60
> <
> https://github.com/apache/mina/commit/8df31da1597056b73f5d6dbf11c75ce13227ba60>
> <
> https://github.com/apache/mina/commit/8df31da1597056b73f5d6dbf11c75ce13227ba60
> <
> https://github.com/apache/mina/commit/8df31da1597056b73f5d6dbf11c75ce13227ba60
> >>>>
> >          >      >      >      >
> >          >      >      >      > * MINA 2.0.26:
> >          >      >      >      >
> >          >      >      >
> >          >      >
> >          >
> >
> https://github.com/apache/mina/commit/4d1cf35024ae565827b63c11bd0b42a62a1c3e49
> <
> https://github.com/apache/mina/commit/4d1cf35024ae565827b63c11bd0b42a62a1c3e49>
> <
> https://github.com/apache/mina/commit/4d1cf35024ae565827b63c11bd0b42a62a1c3e49
> <
> https://github.com/apache/mina/commit/4d1cf35024ae565827b63c11bd0b42a62a1c3e49>>
> <
> https://github.com/apache/mina/commit/4d1cf35024ae565827b63c11bd0b42a62a1c3e49
> <
> https://github.com/apache/mina/commit/4d1cf35024ae565827b63c11bd0b42a62a1c3e49>
> <
> https://github.com/apache/mina/commit/4d1cf35024ae565827b63c11bd0b42a62a1c3e49
> <
> https://github.com/apache/mina/commit/4d1cf35024ae565827b63c11bd0b42a62a1c3e49>>>
> <
> https://github.com/apache/mina/commit/4d1cf35024ae565827b63c11bd0b42a62a1c3e49
> <
> https://github.com/apache/mina/commit/4d1cf35024ae565827b63c11bd0b42a62a1c3e49>
> <
> https://github.com/apache/mina/commit/4d1cf35024ae565827b63c11bd0b42a62a1c3e49
> <
> https://github.com/apache/mina/commit/4d1cf35024ae565827b63c11bd0b42a62a1c3e49>>
> <
> https://github.com/apache/mina/commit/4d1cf35024ae565827b63c11bd0b42a62a1c3e49
> <
> https://github.com/apache/mina/commit/4d1cf35024ae565827b63c11bd0b42a62a1c3e49>
> <
> https://github.com/apache/mina/commit/4d1cf35024ae565827b63c11bd0b42a62a1c3e49
> <
> https://github.com/apache/mina/commit/4d1cf35024ae565827b63c11bd0b42a62a1c3e49
> >>>>
> >          >      >      >      >
> >          >      >      >      >
> >          >      >      >      >
> >          >      >      >      >
> >          >      >      >      > The final artifacts are stored in a
> >         staging repository:
> >          >      >      >      > * MINA 2.1.9:
> >          >      >      >      >
> >          >      >      >
> >          >      >
> >          >
> >
> https://repository.apache.org/content/repositories/orgapachemina-1105 <
> https://repository.apache.org/content/repositories/orgapachemina-1105> <
> https://repository.apache.org/content/repositories/orgapachemina-1105 <
> https://repository.apache.org/content/repositories/orgapachemina-1105>> <
> https://repository.apache.org/content/repositories/orgapachemina-1105 <
> https://repository.apache.org/content/repositories/orgapachemina-1105> <
> https://repository.apache.org/content/repositories/orgapachemina-1105 <
> https://repository.apache.org/content/repositories/orgapachemina-1105>>> <
> https://repository.apache.org/content/repositories/orgapachemina-1105 <
> https://repository.apache.org/content/repositories/orgapachemina-1105> <
> https://repository.apache.org/content/repositories/orgapachemina-1105 <
> https://repository.apache.org/content/repositories/orgapachemina-1105>> <
> https://repository.apache.org/content/repositories/orgapachemina-1105 <
> https://repository.apache.org/content/repositories/orgapachemina-1105> <
> https://repository.apache.org/content/repositories/orgapachemina-1105 <
> https://repository.apache.org/content/repositories/orgapachemina-1105>>>>
> >          >      >      >      > * MINA 2.0.26:
> >          >      >      >      >
> >          >      >      >
> >          >      >
> >          >
> >
> https://repository.apache.org/content/repositories/orgapachemina-1104 <
> https://repository.apache.org/content/repositories/orgapachemina-1104> <
> https://repository.apache.org/content/repositories/orgapachemina-1104 <
> https://repository.apache.org/content/repositories/orgapachemina-1104>> <
> https://repository.apache.org/content/repositories/orgapachemina-1104 <
> https://repository.apache.org/content/repositories/orgapachemina-1104> <
> https://repository.apache.org/content/repositories/orgapachemina-1104 <
> https://repository.apache.org/content/repositories/orgapachemina-1104>>> <
> https://repository.apache.org/content/repositories/orgapachemina-1104 <
> https://repository.apache.org/content/repositories/orgapachemina-1104> <
> https://repository.apache.org/content/repositories/orgapachemina-1104 <
> https://repository.apache.org/content/repositories/orgapachemina-1104>> <
> https://repository.apache.org/content/repositories/orgapachemina-1104 <
> https://repository.apache.org/content/repositories/orgapachemina-1104> <
> https://repository.apache.org/content/repositories/orgapachemina-1104 <
> https://repository.apache.org/content/repositories/orgapachemina-1104>>>>
> >          >      >      >      >
> >          >      >      >      >
> >          >      >      >      >
> >          >      >      >      > The distributions are available for
> >         download on :
> >          >      >      >      > * MINA 2.1.9:
> >          >      >      >
> >         https://dist.apache.org/repos/dist/dev/mina/mina/2.1.9
> >         <https://dist.apache.org/repos/dist/dev/mina/mina/2.1.9>
> >          >     <https://dist.apache.org/repos/dist/dev/mina/mina/2.1.9
> >         <https://dist.apache.org/repos/dist/dev/mina/mina/2.1.9>>
> >          >      >
> >           <https://dist.apache.org/repos/dist/dev/mina/mina/2.1.9
> >         <https://dist.apache.org/repos/dist/dev/mina/mina/2.1.9>
> >          >     <https://dist.apache.org/repos/dist/dev/mina/mina/2.1.9
> >         <https://dist.apache.org/repos/dist/dev/mina/mina/2.1.9>>>
> >          >      >      >
> >          >       <https://dist.apache.org/repos/dist/dev/mina/mina/2.1.9
> >         <https://dist.apache.org/repos/dist/dev/mina/mina/2.1.9>
> >          >     <https://dist.apache.org/repos/dist/dev/mina/mina/2.1.9
> >         <https://dist.apache.org/repos/dist/dev/mina/mina/2.1.9>>
> >          >      >
> >           <https://dist.apache.org/repos/dist/dev/mina/mina/2.1.9
> >         <https://dist.apache.org/repos/dist/dev/mina/mina/2.1.9>
> >          >     <https://dist.apache.org/repos/dist/dev/mina/mina/2.1.9
> >         <https://dist.apache.org/repos/dist/dev/mina/mina/2.1.9>>>>
> >          >      >      >      > * MINA 2.0.26:
> >          >      >      >
> >         https://dist.apache.org/repos/dist/dev/mina/mina/2.0.26
> >         <https://dist.apache.org/repos/dist/dev/mina/mina/2.0.26>
> >          >     <https://dist.apache.org/repos/dist/dev/mina/mina/2.0.26
> >         <https://dist.apache.org/repos/dist/dev/mina/mina/2.0.26>>
> >          >      >
> >           <https://dist.apache.org/repos/dist/dev/mina/mina/2.0.26
> >         <https://dist.apache.org/repos/dist/dev/mina/mina/2.0.26>
> >          >     <https://dist.apache.org/repos/dist/dev/mina/mina/2.0.26
> >         <https://dist.apache.org/repos/dist/dev/mina/mina/2.0.26>>>
> >          >      >      >
> >          >
> >           <https://dist.apache.org/repos/dist/dev/mina/mina/2.0.26
> >         <https://dist.apache.org/repos/dist/dev/mina/mina/2.0.26>
> >          >     <https://dist.apache.org/repos/dist/dev/mina/mina/2.0.26
> >         <https://dist.apache.org/repos/dist/dev/mina/mina/2.0.26>>
> >          >      >
> >           <https://dist.apache.org/repos/dist/dev/mina/mina/2.0.26
> >         <https://dist.apache.org/repos/dist/dev/mina/mina/2.0.26>
> >          >     <https://dist.apache.org/repos/dist/dev/mina/mina/2.0.26
> >         <https://dist.apache.org/repos/dist/dev/mina/mina/2.0.26>>>>
> >          >      >      >      >
> >          >      >      >      >
> >          >      >      >      > Let us vote :
> >          >      >      >      > [ ] +1 | Release MINA 2.1.9
> >          >      >      >      > [ ] ± | Abstain
> >          >      >      >      > [ ] -1 | Do *NOT* release MINA 2.1.9
> >          >      >      >      >
> >          >      >      >      >
> >          >      >      >      > [ ] +1 | Release MINA 2.0.26
> >          >      >      >      > [ ] ± | Abstain
> >          >      >      >      > [ ] -1 | Do *NOT* release MINA 2.0.26
> >          >      >      >      >
> >          >      >      >      >
> >          >      >      >      >
> >          >      >      >
> >          >      >      >     --
> >          >      >      >     *Emmanuel Lécharny* P. +33 (0)6 08 33 32 61
> >          >      >      > elecha...@apache.org
> >         <mailto:elecha...@apache.org> <mailto:elecha...@apache.org
> >         <mailto:elecha...@apache.org>>
> >          >     <mailto:elecha...@apache.org
> >         <mailto:elecha...@apache.org> <mailto:elecha...@apache.org
> >         <mailto:elecha...@apache.org>>>
> >          >      >     <mailto:elecha...@apache.org
> >         <mailto:elecha...@apache.org> <mailto:elecha...@apache.org
> >         <mailto:elecha...@apache.org>>
> >          >     <mailto:elecha...@apache.org
> >         <mailto:elecha...@apache.org> <mailto:elecha...@apache.org
> >         <mailto:elecha...@apache.org>>>>
> >          >      >      >
> >          >      >      >
> >          >      >
> >          >
> >
>  ---------------------------------------------------------------------
> >          >      >      >     To unsubscribe, e-mail:
> >          > dev-unsubscr...@mina.apache.org
> >         <mailto:dev-unsubscr...@mina.apache.org>
> >         <mailto:dev-unsubscr...@mina.apache.org
> >         <mailto:dev-unsubscr...@mina.apache.org>>
> >          >      >     <mailto:dev-unsubscr...@mina.apache.org
> >         <mailto:dev-unsubscr...@mina.apache.org>
> >          >     <mailto:dev-unsubscr...@mina.apache.org
> >         <mailto:dev-unsubscr...@mina.apache.org>>>
> >          >      >      >     <mailto:dev-unsubscr...@mina.apache.org
> >         <mailto:dev-unsubscr...@mina.apache.org>
> >          >     <mailto:dev-unsubscr...@mina.apache.org
> >         <mailto:dev-unsubscr...@mina.apache.org>>
> >          >      >     <mailto:dev-unsubscr...@mina.apache.org
> >         <mailto:dev-unsubscr...@mina.apache.org>
> >          >     <mailto:dev-unsubscr...@mina.apache.org
> >         <mailto:dev-unsubscr...@mina.apache.org>>>>
> >          >      >      >     For additional commands, e-mail:
> >          > dev-h...@mina.apache.org <mailto:dev-h...@mina.apache.org>
> >         <mailto:dev-h...@mina.apache.org <mailto:
> dev-h...@mina.apache.org>>
> >          >      >     <mailto:dev-h...@mina.apache.org
> >         <mailto:dev-h...@mina.apache.org>
> >          >     <mailto:dev-h...@mina.apache.org
> >         <mailto:dev-h...@mina.apache.org>>>
> >          >      >      >     <mailto:dev-h...@mina.apache.org
> >         <mailto:dev-h...@mina.apache.org>
> >          >     <mailto:dev-h...@mina.apache.org
> >         <mailto:dev-h...@mina.apache.org>>
> >          >      >     <mailto:dev-h...@mina.apache.org
> >         <mailto:dev-h...@mina.apache.org>
> >          >     <mailto:dev-h...@mina.apache.org
> >         <mailto:dev-h...@mina.apache.org>>>>
> >          >      >      >
> >          >      >
> >          >      >     --
> >          >      >     *Emmanuel Lécharny* P. +33 (0)6 08 33 32 61
> >          >      > elecha...@apache.org <mailto:elecha...@apache.org>
> >         <mailto:elecha...@apache.org <mailto:elecha...@apache.org>>
> >          >     <mailto:elecha...@apache.org
> >         <mailto:elecha...@apache.org> <mailto:elecha...@apache.org
> >         <mailto:elecha...@apache.org>>>
> >          >      >
> >          >
> >          >     --
> >          >     *Emmanuel Lécharny* P. +33 (0)6 08 33 32 61
> >          > elecha...@apache.org <mailto:elecha...@apache.org>
> >         <mailto:elecha...@apache.org <mailto:elecha...@apache.org>>
> >          >
> >
> >         --
> >         *Emmanuel Lécharny* P. +33 (0)6 08 33 32 61
> >         elecha...@apache.org <mailto:elecha...@apache.org>
> >
> >
>  ---------------------------------------------------------------------
> >         To unsubscribe, e-mail: dev-unsubscr...@mina.apache.org
> >         <mailto:dev-unsubscr...@mina.apache.org>
> >         For additional commands, e-mail: dev-h...@mina.apache.org
> >         <mailto:dev-h...@mina.apache.org>
> >
> >
> >
> >     --
> >     ------------------------
> >     Guillaume Nodet
> >
>
> --
> *Emmanuel Lécharny* P. +33 (0)6 08 33 32 61
> elecha...@apache.org
>

Reply via email to