Gary… yep! Countdown latch would od the trick for that. I use that in all my thread based tests.
Jeff > On Oct 13, 2024, at 6:10 AM, Gary Gregory <garydgreg...@gmail.com> wrote: > > 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 >> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@mina.apache.org For additional commands, e-mail: dev-h...@mina.apache.org