diff --git a/barchart-udt-core/.classpath b/barchart-udt-core/.classpath index 49c1603..c17861b 100644 --- a/barchart-udt-core/.classpath +++ b/barchart-udt-core/.classpath @@ -27,7 +27,7 @@ - + diff --git a/barchart-udt-core/src/main/java/com/barchart/udt/net/NetServerSocketUDT.java b/barchart-udt-core/src/main/java/com/barchart/udt/net/NetServerSocketUDT.java index 935ab1f..27b4c07 100644 --- a/barchart-udt-core/src/main/java/com/barchart/udt/net/NetServerSocketUDT.java +++ b/barchart-udt-core/src/main/java/com/barchart/udt/net/NetServerSocketUDT.java @@ -23,8 +23,8 @@ /** * {@link ServerSocket} - like wrapper for {@link SocketUDT} */ -public class NetServerSocketUDT extends ServerSocket implements - IceServerSocket, IceCommon { +public class NetServerSocketUDT extends ServerSocket + implements IceServerSocket, IceCommon { protected final SocketUDT socketUDT; diff --git a/barchart-udt-core/src/main/java/com/barchart/udt/nio/NioServerSocketUDT.java b/barchart-udt-core/src/main/java/com/barchart/udt/nio/NioServerSocketUDT.java index 4cbe935..bcd2be0 100644 --- a/barchart-udt-core/src/main/java/com/barchart/udt/nio/NioServerSocketUDT.java +++ b/barchart-udt-core/src/main/java/com/barchart/udt/nio/NioServerSocketUDT.java @@ -25,7 +25,7 @@ protected NioServerSocketUDT(final ServerSocketChannelUDT channelUDT) @Override public Socket accept() throws IOException { - throw new RuntimeException("feature not available"); + return channelUDT.accept().socket(); } @Override diff --git a/barchart-udt-core/src/main/java/com/barchart/udt/nio/SelectionKeyUDT.java b/barchart-udt-core/src/main/java/com/barchart/udt/nio/SelectionKeyUDT.java index a012d05..fd196c3 100644 --- a/barchart-udt-core/src/main/java/com/barchart/udt/nio/SelectionKeyUDT.java +++ b/barchart-udt-core/src/main/java/com/barchart/udt/nio/SelectionKeyUDT.java @@ -1,15 +1,16 @@ /** * Copyright (C) 2009-2013 Barchart, Inc. - * - * All rights reserved. Licensed under the OSI BSD License. - * - * http://www.opensource.org/licenses/bsd-license.php - */ +* +* All rights reserved. Licensed under the OSI BSD License. +* +* http://www.opensource.org/licenses/bsd-license.php +*/ package com.barchart.udt.nio; import java.nio.channels.CancelledKeyException; import java.nio.channels.SelectableChannel; import java.nio.channels.SelectionKey; +import java.nio.channels.spi.AbstractSelectionKey; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,8 +25,8 @@ /** * UDT selection key implementation. */ -public class SelectionKeyUDT extends SelectionKey implements - Comparable { +public class SelectionKeyUDT extends AbstractSelectionKey + implements Comparable { /** * JDK interest to Epoll READ mapping. @@ -93,7 +94,7 @@ public static final String toStringOps(final int selectOps) { /** * Key validity state. Key is valid when created, and invalid when canceled. */ - private volatile boolean isValid; + // private volatile boolean isValid; /** * Reported ready interest. @@ -140,17 +141,16 @@ protected void assertValidKey() throws CancelledKeyException { */ protected void assertValidOps(final int interestOps) { if ((interestOps & ~(channel().validOps())) != 0) { - throw new IllegalArgumentException("invalid interestOps=" - + interestOps); + throw new IllegalArgumentException( + "invalid interestOps=" + interestOps); } } - @Override - public void cancel() { - if (isValid()) { - selector().cancel(this); - } - } + /* + * @Override + * + * public void cancel() { if (isValid()) { selector().cancel(this); } } + */ @Override public SelectableChannel channel() { @@ -202,6 +202,10 @@ protected boolean doRead(final int resultIndex) { readyOps = channel().validOps(); return true; } else { + /** + * in some programe use invoke selectNow to clear canceld + * key + */ logError("Unexpected error report."); return false; } @@ -414,10 +418,11 @@ protected boolean isSocketBroken() { } } - @Override - public boolean isValid() { - return isValid; - } + /* + * @Override + * + * public boolean isValid() { return isValid; } + */ /** * Channel role. @@ -427,13 +432,14 @@ protected KindUDT kindUDT() { } /** - * Key processing logic error logger. + * Key processing logic error logger. user while use selectNow to clear + * cancel keys */ protected void logError(final String comment) { final String message = "logic error : \n\t" + this; - log.warn(message, new Exception("" + comment)); + log.debug(message, new Exception("" + comment)); } @@ -451,7 +457,10 @@ protected void makeValid(final boolean isValid) { } catch (final Throwable e) { log.error("Epoll failure.", e); } finally { - this.isValid = isValid; + /* + * if (!isValid) { cancel(); } + */ + // this.isValid = isValid; } } @@ -486,20 +495,20 @@ protected SocketUDT socketUDT() { @Override public String toString() { - return String - .format("[id: 0x%08x] poll=%s ready=%s inter=%s %s %s %s bind=%s:%s peer=%s:%s", // - socketUDT().id(), // - epollOpt, // - toStringOps(readyOps), // - toStringOps(interestOps), // - channelUDT.typeUDT(), // - channelUDT.kindUDT(), // - socketUDT().status(), // - socketUDT().getLocalInetAddress(), // - socketUDT().getLocalInetPort(), // - socketUDT().getRemoteInetAddress(), // - socketUDT().getRemoteInetPort() // - ); + return String.format( + "[id: 0x%08x] poll=%s ready=%s inter=%s %s %s %s bind=%s:%s peer=%s:%s", // + socketUDT().id(), // + epollOpt, // + toStringOps(readyOps), // + toStringOps(interestOps), // + channelUDT.typeUDT(), // + channelUDT.kindUDT(), // + socketUDT().status(), // + socketUDT().getLocalInetAddress(), // + socketUDT().getLocalInetPort(), // + socketUDT().getRemoteInetAddress(), // + socketUDT().getRemoteInetPort() // + ); } diff --git a/barchart-udt-core/src/main/java/com/barchart/udt/nio/SelectorUDT.java b/barchart-udt-core/src/main/java/com/barchart/udt/nio/SelectorUDT.java index 6f33f1f..cd69b50 100644 --- a/barchart-udt-core/src/main/java/com/barchart/udt/nio/SelectorUDT.java +++ b/barchart-udt-core/src/main/java/com/barchart/udt/nio/SelectorUDT.java @@ -124,8 +124,11 @@ protected static Selector open(final TypeUDT type) throws IOException { /** * Canceled keys. */ - private final ConcurrentMap // - terminatedKeyMap = new ConcurrentHashMap(); + /* + * private final ConcurrentMap // + * terminatedKeyMap = new ConcurrentHashMap(); + */ /** guarded by {@link #doSelectLocked} */ private volatile int wakeupBaseCount; @@ -150,31 +153,25 @@ protected SelectorUDT( // } - /** - * Enqueue cancel request. - */ - protected void cancel(final SelectionKeyUDT keyUDT) { - terminatedKeyMap.putIfAbsent(keyUDT, keyUDT); - } - /** * Process pending cancel requests. */ protected void doCancel() { - if (terminatedKeyMap.isEmpty()) { - return; - } - - final Iterator iterator = terminatedKeyMap.values() - .iterator(); - - while (iterator.hasNext()) { - final SelectionKeyUDT keyUDT = iterator.next(); - iterator.remove(); - if (keyUDT.isValid()) { + final Set cks = cancelledKeys(); + + synchronized (cks) { + if (cks.isEmpty()) + return; + final Iterator iterator = cks.iterator(); + while (iterator.hasNext()) { + final SelectionKeyUDT keyUDT = iterator.next(); + iterator.remove(); + // if (keyUDT.isValid()) { + this.deregister(keyUDT); keyUDT.makeValid(false); registeredKeyMap.remove(keyUDT.socketId()); + // } } } @@ -210,14 +207,15 @@ protected int doEpollEnter(final long millisTimeout) throws IOException { * >0 : finite; * @return * - * <0 : should not happen + * <0 : should not happen * * =0 : means nothing was selected/timeout * * >0 : number of selected keys */ - protected int doEpollExclusive(final long millisTimeout) throws IOException { + protected int doEpollExclusive(final long millisTimeout) + throws IOException { try { @@ -299,7 +297,7 @@ protected int doEpollSelectUDT(final long timeout) throws ExceptionUDT { writeBuffer, // sizeBuffer, // timeout // - ); + ); } protected void doResults() { @@ -379,7 +377,7 @@ protected void implCloseSelector() throws IOException { selectLock.lock(); for (final SelectionKeyUDT keyUDT : registeredKeyMap.values()) { - cancel(keyUDT); + keyUDT.cancel(); } } finally { diff --git a/barchart-udt-core/src/main/java/com/barchart/udt/nio/ServerSocketChannelUDT.java b/barchart-udt-core/src/main/java/com/barchart/udt/nio/ServerSocketChannelUDT.java index 932b9d5..dd11a2a 100644 --- a/barchart-udt-core/src/main/java/com/barchart/udt/nio/ServerSocketChannelUDT.java +++ b/barchart-udt-core/src/main/java/com/barchart/udt/nio/ServerSocketChannelUDT.java @@ -38,8 +38,8 @@ * assert connectChannel.isConnected(); * */ -public class ServerSocketChannelUDT extends ServerSocketChannel implements - ChannelUDT { +public class ServerSocketChannelUDT extends ServerSocketChannel + implements ChannelUDT { protected static final Logger log = LoggerFactory .getLogger(ServerSocketChannelUDT.class); diff --git a/barchart-udt-core/src/main/java/com/barchart/udt/nio/SocketChannelUDT.java b/barchart-udt-core/src/main/java/com/barchart/udt/nio/SocketChannelUDT.java index c402f9d..eb5b430 100644 --- a/barchart-udt-core/src/main/java/com/barchart/udt/nio/SocketChannelUDT.java +++ b/barchart-udt-core/src/main/java/com/barchart/udt/nio/SocketChannelUDT.java @@ -356,8 +356,8 @@ public int read(final ByteBuffer buffer) throws IOException { } @Override - public long read(final ByteBuffer[] dsts, final int offset, final int length) - throws IOException { + public long read(final ByteBuffer[] dsts, final int offset, + final int length) throws IOException { throw new RuntimeException("feature not available"); } @@ -521,5 +521,4 @@ public SocketChannelUDT bind(final SocketAddress localAddress) return this; } - } diff --git a/barchart-udt-core/src/main/patches/UDT4/readme.md b/barchart-udt-core/src/main/patches/UDT4/readme.md index 6a55846..f700303 100644 --- a/barchart-udt-core/src/main/patches/UDT4/readme.md +++ b/barchart-udt-core/src/main/patches/UDT4/readme.md @@ -7,5 +7,4 @@ http://www.opensource.org/licenses/bsd-license.php --> -patches to udt c++ v 4.X - +patches to udt c++ v 4.11 from git diff --git a/barchart-udt-core/src/main/patches/udt4/2013-05-11.patch b/barchart-udt-core/src/main/patches/udt4/2013-05-11.patch deleted file mode 100644 index f2ebb07..0000000 --- a/barchart-udt-core/src/main/patches/udt4/2013-05-11.patch +++ /dev/null @@ -1,380 +0,0 @@ -diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/api.cpp work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/api.cpp -index e444218..5c83456 100644 ---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/api.cpp -+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/api.cpp -@@ -1104,6 +1104,32 @@ int CUDTUnited::epoll_add_usock(const int eid, const UDTSOCKET u, const int* eve - return ret; - } - -+// BARCHART -+int CUDTUnited::epoll_update_usock(const int eid, const UDTSOCKET u, const int* events) -+{ -+ CUDTSocket* s = locate(u); -+ int ret = -1; -+ if (NULL != s) { -+ ret = m_EPoll.update_usock(eid, u, events); -+ } else { -+ throw CUDTException(5, 4); -+ } -+ return ret; -+} -+ -+// BARCHART -+int CUDTUnited::epoll_verify_usock(const int eid, const UDTSOCKET u, int* events) -+{ -+ CUDTSocket* s = locate(u); -+ int ret = -1; -+ if (NULL != s) { -+ ret = m_EPoll.verify_usock(eid, u, events); -+ } else { -+ throw CUDTException(5, 4); -+ } -+ return ret; -+} -+ - int CUDTUnited::epoll_add_ssock(const int eid, const SYSSOCKET s, const int* events) - { - return m_EPoll.add_ssock(eid, s, events); -@@ -1111,8 +1137,6 @@ int CUDTUnited::epoll_add_ssock(const int eid, const SYSSOCKET s, const int* eve - - int CUDTUnited::epoll_remove_usock(const int eid, const UDTSOCKET u) - { -- int ret = m_EPoll.remove_usock(eid, u); -- - CUDTSocket* s = locate(u); - if (NULL != s) - { -@@ -1123,7 +1147,7 @@ int CUDTUnited::epoll_remove_usock(const int eid, const UDTSOCKET u) - // throw CUDTException(5, 4); - //} - -- return ret; -+ return m_EPoll.remove_usock(eid, u); - } - - int CUDTUnited::epoll_remove_ssock(const int eid, const SYSSOCKET s) -@@ -2012,6 +2036,44 @@ int CUDT::epoll_add_usock(const int eid, const UDTSOCKET u, const int* events) - } - } - -+// BARCHART -+int CUDT::epoll_update_usock(const int eid, const UDTSOCKET u, const int* events) -+{ -+ try -+ { -+ return s_UDTUnited.epoll_update_usock(eid, u, events); -+ } -+ catch (CUDTException e) -+ { -+ s_UDTUnited.setError(new CUDTException(e)); -+ return ERROR; -+ } -+ catch (...) -+ { -+ s_UDTUnited.setError(new CUDTException(-1, 0, 0)); -+ return ERROR; -+ } -+} -+ -+// BARCHART -+int CUDT::epoll_verify_usock(const int eid, const UDTSOCKET u, int* events) -+{ -+ try -+ { -+ return s_UDTUnited.epoll_verify_usock(eid, u, events); -+ } -+ catch (CUDTException e) -+ { -+ s_UDTUnited.setError(new CUDTException(e)); -+ return ERROR; -+ } -+ catch (...) -+ { -+ s_UDTUnited.setError(new CUDTException(-1, 0, 0)); -+ return ERROR; -+ } -+} -+ - int CUDT::epoll_add_ssock(const int eid, const SYSSOCKET s, const int* events) - { - try -@@ -2289,6 +2351,18 @@ int epoll_add_usock(int eid, UDTSOCKET u, const int* events) - return CUDT::epoll_add_usock(eid, u, events); - } - -+// BARCHART -+int epoll_update_usock(int eid, UDTSOCKET u, const int* events) -+{ -+ return CUDT::epoll_update_usock(eid, u, events); -+} -+ -+// BARCHART -+int epoll_verify_usock(int eid, UDTSOCKET u, int* events) -+{ -+ return CUDT::epoll_verify_usock(eid, u, events); -+} -+ - int epoll_add_ssock(int eid, SYSSOCKET s, const int* events) - { - return CUDT::epoll_add_ssock(eid, s, events); -diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/api.h work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/api.h -index 24f1a02..2f5f434 100644 ---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/api.h -+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/api.h -@@ -181,6 +181,11 @@ public: - int epoll_wait(const int eid, std::set* readfds, std::set* writefds, int64_t msTimeOut, std::set* lrfds = NULL, std::set* lwfds = NULL); - int epoll_release(const int eid); - -+ // BARCHART -+ int epoll_update_usock(const int eid, const UDTSOCKET u, const int* events = NULL); -+ // BARCHART -+ int epoll_verify_usock(const int eid, const UDTSOCKET u, int* events); -+ - // Functionality: - // record the UDT exception. - // Parameters: -diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/ccc.cpp work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/ccc.cpp -index 048b7ec..a58816f 100644 ---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/ccc.cpp -+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/ccc.cpp -@@ -35,7 +35,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - /***************************************************************************** - written by -- Yunhong Gu, last updated 02/21/2013 -+ Yunhong Gu, last updated 02/28/2012 - *****************************************************************************/ - - -@@ -213,7 +213,7 @@ void CUDTCC::onACK(int32_t ack) - if (m_iRcvRate > 0) - m_dPktSndPeriod = 1000000.0 / m_iRcvRate; - else -- m_dPktSndPeriod = (m_iRTT + m_iRCInterval) / m_dCWndSize; -+ m_dPktSndPeriod = m_dCWndSize / (m_iRTT + m_iRCInterval); - } - } - else -diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/common.h work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/common.h -index 3782d61..3ecf846 100644 ---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/common.h -+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/common.h -@@ -47,6 +47,10 @@ written by - #include - #include - #else -+ #ifdef __MINGW__ -+ #include -+ #include -+ #endif - #include - #endif - #include -diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/core.cpp work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/core.cpp -index 1f3b206..ec8b2fa 100644 ---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/core.cpp -+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/core.cpp -@@ -580,8 +580,6 @@ void CUDT::connect(const sockaddr* serv_addr) - if (m_bConnecting || m_bConnected) - throw CUDTException(5, 2, 0); - -- m_bConnecting = true; -- - // record peer/server address - delete m_pPeerAddr; - m_pPeerAddr = (AF_INET == m_iIPversion) ? (sockaddr*)new sockaddr_in : (sockaddr*)new sockaddr_in6; -@@ -628,6 +626,8 @@ void CUDT::connect(const sockaddr* serv_addr) - m_pSndQueue->sendto(serv_addr, request); - m_llLastReqTime = CTimer::getTime(); - -+ m_bConnecting = true; -+ - // asynchronous connect, return immediately - if (!m_bSynRecving) - { -@@ -801,12 +801,12 @@ POST_CONNECT: - m_pRNode->m_bOnList = true; - m_pRcvQueue->setNewEntry(this); - -- // acknowledge the management module. -- s_UDTUnited.connect_complete(m_SocketID); -- - // acknowledde any waiting epolls to write - s_UDTUnited.m_EPoll.update_events(m_SocketID, m_sPollID, UDT_EPOLL_OUT, true); - -+ // acknowledge the management module. -+ s_UDTUnited.connect_complete(m_SocketID); -+ - return 0; - } - -@@ -951,9 +951,7 @@ void CUDT::close() - if (m_bConnected) - m_pSndQueue->m_pSndUList->remove(this); - -- // trigger any pending IO events. -- s_UDTUnited.m_EPoll.update_events(m_SocketID, m_sPollID, UDT_EPOLL_ERR, true); -- // then remove itself from all epoll monitoring -+ // remove itself from all epoll monitoring - try - { - for (set::iterator i = m_sPollID.begin(); i != m_sPollID.end(); ++ i) -@@ -2462,7 +2460,7 @@ int CUDT::listen(sockaddr* addr, CPacket& packet) - char clienthost[NI_MAXHOST]; - char clientport[NI_MAXSERV]; - getnameinfo(addr, (AF_INET == m_iVersion) ? sizeof(sockaddr_in) : sizeof(sockaddr_in6), clienthost, sizeof(clienthost), clientport, sizeof(clientport), NI_NUMERICHOST|NI_NUMERICSERV); -- int64_t timestamp = (CTimer::getTime() - m_StartTime) / 60000000; // secret changes every one minute -+ int64_t timestamp = (CTimer::getTime() - m_StartTime) / 60000000; // secret changes every one minute - stringstream cookiestr; - cookiestr << clienthost << ":" << clientport << ":" << timestamp; - unsigned char cookie[16]; -@@ -2663,13 +2661,11 @@ void CUDT::addEPoll(const int eid) - - void CUDT::removeEPoll(const int eid) - { -- // clear IO events notifications; -- // since this happens after the epoll ID has been removed, they cannot be set again -- set remove; -- remove.insert(eid); -- s_UDTUnited.m_EPoll.update_events(m_SocketID, remove, UDT_EPOLL_IN | UDT_EPOLL_OUT, false); -- - CGuard::enterCS(s_UDTUnited.m_EPoll.m_EPollLock); - m_sPollID.erase(eid); - CGuard::leaveCS(s_UDTUnited.m_EPoll.m_EPollLock); -+ -+ // clear IO events notifications; -+ // since this happens after the epoll ID has been removed, they cannot be set again -+ s_UDTUnited.m_EPoll.update_events(m_SocketID, m_sPollID, UDT_EPOLL_IN | UDT_EPOLL_OUT, false); - } -diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/core.h work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/core.h -index 47caa79..bd15e17 100644 ---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/core.h -+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/core.h -@@ -108,6 +108,12 @@ public: //API - static int perfmon(UDTSOCKET u, CPerfMon* perf, bool clear = true); - static UDTSTATUS getsockstate(UDTSOCKET u); - -+ // BARCHART -+ static int epoll_update_usock(const int eid, const UDTSOCKET u, const int* events = NULL); -+ // BARCHART -+ static int epoll_verify_usock(const int eid, const UDTSOCKET u, int* events); -+ -+ - public: // internal API - static CUDT* getUDTHandle(UDTSOCKET u); - -diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/epoll.cpp work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/epoll.cpp -index 0e7ddb1..04acc04 100644 ---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/epoll.cpp -+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/epoll.cpp -@@ -107,6 +107,58 @@ int CEPoll::add_usock(const int eid, const UDTSOCKET& u, const int* events) - return 0; - } - -+// BARCHART -+int CEPoll::update_usock(const int eid, const UDTSOCKET& u, const int* events) -+{ -+ CGuard pg(m_EPollLock); -+ -+ map::iterator p = m_mPolls.find(eid); -+ if (p == m_mPolls.end()){ -+ throw CUDTException(5, 13); -+ } -+ -+ if(events){ -+ if (*events & UDT_EPOLL_IN){ -+ p->second.m_sUDTSocksIn.insert(u); -+ }else{ -+ p->second.m_sUDTSocksIn.erase(u); -+ } -+ if (*events & UDT_EPOLL_OUT){ -+ p->second.m_sUDTSocksOut.insert(u); -+ } else{ -+ p->second.m_sUDTSocksOut.erase(u); -+ } -+ } -+ -+ return 0; -+} -+ -+ -+// BARCHART -+int CEPoll::verify_usock(const int eid, const UDTSOCKET& u, int* events) -+{ -+ -+ CGuard pg(m_EPollLock); -+ -+ map::iterator p = m_mPolls.find(eid); -+ if (p == m_mPolls.end()){ -+ throw CUDTException(5, 13); -+ } -+ -+ if(events){ -+ if(p->second.m_sUDTSocksIn.find(u) != p->second.m_sUDTSocksIn.end()){ -+ *events |= UDT_EPOLL_IN; -+ } -+ if(p->second.m_sUDTSocksOut.find(u) != p->second.m_sUDTSocksOut.end()){ -+ *events |= UDT_EPOLL_OUT; -+ } -+ } -+ -+ return 0; -+ -+} -+ -+ - int CEPoll::add_ssock(const int eid, const SYSSOCKET& s, const int* events) - { - CGuard pg(m_EPollLock); -@@ -117,7 +169,6 @@ int CEPoll::add_ssock(const int eid, const SYSSOCKET& s, const int* events) - - #ifdef LINUX - epoll_event ev; -- memset(&ev, 0, sizeof(epoll_event)); - - if (NULL == events) - ev.events = EPOLLIN | EPOLLOUT | EPOLLERR; -@@ -152,7 +203,10 @@ int CEPoll::remove_usock(const int eid, const UDTSOCKET& u) - - p->second.m_sUDTSocksIn.erase(u); - p->second.m_sUDTSocksOut.erase(u); -- p->second.m_sUDTSocksEx.erase(u); -+ -+ // when the socket is removed from a monitoring, it is not available anymore for any IO notification -+ p->second.m_sUDTReads.erase(u); -+ p->second.m_sUDTWrites.erase(u); - - return 0; - } -diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/epoll.h work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/epoll.h -index a19f8ab..2dc349d 100644 ---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/epoll.h -+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/epoll.h -@@ -93,6 +93,11 @@ public: // for CUDTUnited API - - int add_usock(const int eid, const UDTSOCKET& u, const int* events = NULL); - -+ // BARCHART -+ int update_usock(const int eid, const UDTSOCKET& u, const int* events = NULL); -+ // BARCHART -+ int verify_usock(const int eid, const UDTSOCKET& u, int* events); -+ - // Functionality: - // add a system socket to an EPoll. - // Parameters: -diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/udt.h work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/udt.h -index 6436363..ec0b8cf 100644 ---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/udt.h -+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/udt.h -@@ -336,6 +336,11 @@ UDT_API int select(int nfds, UDSET* readfds, UDSET* writefds, UDSET* exceptfds, - UDT_API int selectEx(const std::vector& fds, std::vector* readfds, - std::vector* writefds, std::vector* exceptfds, int64_t msTimeOut); - -+// BARCHART -+UDT_API int epoll_update_usock(int eid, UDTSOCKET u, const int* events = NULL); -+// BARCHART -+UDT_API int epoll_verify_usock(int eid, UDTSOCKET u, int* events); -+ - UDT_API int epoll_create(); - UDT_API int epoll_add_usock(int eid, UDTSOCKET u, const int* events = NULL); - UDT_API int epoll_add_ssock(int eid, SYSSOCKET s, const int* events = NULL); diff --git a/barchart-udt-core/src/main/patches/udt4/2013-05-12.patch b/barchart-udt-core/src/main/patches/udt4/2013-05-12.patch deleted file mode 100644 index d1bf28f..0000000 --- a/barchart-udt-core/src/main/patches/udt4/2013-05-12.patch +++ /dev/null @@ -1,63 +0,0 @@ -diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/common.h work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/common.h -index 3782d61..3ecf846 100644 ---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/common.h -+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/common.h -@@ -47,6 +47,10 @@ written by - #include - #include - #else -+ #ifdef __MINGW__ -+ #include -+ #include -+ #endif - #include - #endif - #include -diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/core.cpp work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/core.cpp -index 1f3b206..17fc960 100644 ---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/core.cpp -+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/core.cpp -@@ -952,7 +952,13 @@ void CUDT::close() - m_pSndQueue->m_pSndUList->remove(this); - - // trigger any pending IO events. -+ // s_UDTUnited.m_EPoll.update_events(m_SocketID, m_sPollID, UDT_EPOLL_ERR, true); -+ -+ // BARCHART: Trigger pending events as errors; CEPoll::wait does error cleanup. -+ s_UDTUnited.m_EPoll.update_events(m_SocketID, m_sPollID, UDT_EPOLL_IN, false); -+ s_UDTUnited.m_EPoll.update_events(m_SocketID, m_sPollID, UDT_EPOLL_OUT, false); - s_UDTUnited.m_EPoll.update_events(m_SocketID, m_sPollID, UDT_EPOLL_ERR, true); -+ - // then remove itself from all epoll monitoring - try - { -diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/epoll.cpp work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/epoll.cpp -index 0e7ddb1..2805ed3 100644 ---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/epoll.cpp -+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/epoll.cpp -@@ -99,10 +99,13 @@ int CEPoll::add_usock(const int eid, const UDTSOCKET& u, const int* events) - if (p == m_mPolls.end()) - throw CUDTException(5, 13); - -+ // BARCHART: Manage all event types. - if (!events || (*events & UDT_EPOLL_IN)) - p->second.m_sUDTSocksIn.insert(u); - if (!events || (*events & UDT_EPOLL_OUT)) - p->second.m_sUDTSocksOut.insert(u); -+ if (!events || (*events & UDT_EPOLL_ERR)) -+ p->second.m_sUDTSocksEx.insert(u); - - return 0; - } -@@ -225,6 +228,11 @@ int CEPoll::wait(const int eid, set* readfds, set* writefd - total += p->second.m_sUDTWrites.size() + p->second.m_sUDTExcepts.size(); - } - -+ // BARCHART: Remove errors when reported. -+ if(total > 0 && !p->second.m_sUDTExcepts.empty()){ -+ p->second.m_sUDTExcepts.clear(); -+ } -+ - if (lrfds || lwfds) - { - #ifdef LINUX diff --git a/barchart-udt-core/src/main/patches/udt4/readme.md b/barchart-udt-core/src/main/patches/udt4/readme.md deleted file mode 100644 index f700303..0000000 --- a/barchart-udt-core/src/main/patches/udt4/readme.md +++ /dev/null @@ -1,10 +0,0 @@ - -patches to udt c++ v 4.11 from git