From d937716af0099a1464114aea325702a0c09091c4 Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Mon, 22 Nov 2010 00:54:39 +0000 Subject: [PATCH] use PtrToPtr64 for scatter/gather I/O operations --- ChangeLog | 1 + src/file.cpp | 6 ++++-- src/udp_socket.cpp | 6 ++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index d41f674e8..73cf537c3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -55,6 +55,7 @@ incoming connection * added more detailed instrumentation of the disk I/O thread + * potential WOW64 fix for unbuffered I/O (windows) * expose set_alert_queue_size_limit to python binding * support dht nodes in magnet links * support 100 Continue HTTP responses diff --git a/src/file.cpp b/src/file.cpp index b0842e2a9..49890e61f 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -1067,7 +1067,7 @@ namespace libtorrent { for (int k = 0; k < int(i->iov_len); k += m_page_size) { - cur_seg->Buffer = ((char*)i->iov_base) + k; + cur_seg->Buffer = PtrToPtr64(((char*)i->iov_base) + k); ++cur_seg; } } @@ -1250,7 +1250,7 @@ namespace libtorrent { for (int k = 0; k < int(i->iov_len); k += m_page_size) { - cur_seg->Buffer = ((char*)i->iov_base) + k; + cur_seg->Buffer = PtrToPtr64(((char*)i->iov_base) + k); ++cur_seg; } } @@ -1285,6 +1285,8 @@ namespace libtorrent { if (GetLastError() != ERROR_IO_PENDING) { + TORRENT_ASSERT(GetLastError() != ERROR_BAD_ARGUMENTS); + TORRENT_ASSERT(GetLastError() != ERROR_BAD_ARGUMENTS); ec.assign(GetLastError(), get_system_category()); CloseHandle(ol.hEvent); return -1; diff --git a/src/udp_socket.cpp b/src/udp_socket.cpp index e6f0e1a78..9f84ba746 100644 --- a/src/udp_socket.cpp +++ b/src/udp_socket.cpp @@ -415,12 +415,18 @@ void udp_socket::close() // utp connections or NAT-PMP. We need to cancel the // outstanding operations m_ipv4_sock.cancel(ec); + if (ec == error::operation_not_supported) + m_ipv4_sock.close(ec); TORRENT_ASSERT_VAL(!ec || ec == error::bad_descriptor, ec); #if TORRENT_USE_IPV6 m_ipv6_sock.cancel(ec); + if (ec == error::operation_not_supported) + m_ipv6_sock.close(ec); TORRENT_ASSERT_VAL(!ec || ec == error::bad_descriptor, ec); #endif m_socks5_sock.cancel(ec); + if (ec == error::operation_not_supported) + m_socks5_sock.close(ec); TORRENT_ASSERT_VAL(!ec || ec == error::bad_descriptor, ec); m_resolver.cancel(); m_abort = true;