[w32socket] Use coop handles for System.Net.Sockets.Socket.cancel_blocking_socket_ope...
authorAleksey Kliger <aleksey@xamarin.com>
Fri, 2 Jun 2017 19:16:31 +0000 (15:16 -0400)
committerAleksey Kliger <aleksey@xamarin.com>
Mon, 5 Jun 2017 19:01:47 +0000 (15:01 -0400)
mono/metadata/icall-def.h
mono/metadata/w32socket.c
mono/metadata/w32socket.h

index 183e5fca21dba931121d1eeeb5645fc876e8d1e9..a77e1a7c00ed6589fb4456c37da2838fd4595154 100644 (file)
@@ -479,7 +479,7 @@ HANDLES(ICALL(SOCK_18, "SetSocketOption_internal(intptr,System.Net.Sockets.Socke
 HANDLES(ICALL(SOCK_19, "Shutdown_internal(intptr,System.Net.Sockets.SocketShutdown,int&)", ves_icall_System_Net_Sockets_Socket_Shutdown_internal))
 HANDLES(ICALL(SOCK_20, "Socket_internal(System.Net.Sockets.AddressFamily,System.Net.Sockets.SocketType,System.Net.Sockets.ProtocolType,int&)", ves_icall_System_Net_Sockets_Socket_Socket_internal))
 HANDLES(ICALL(SOCK_20a, "SupportsPortReuse", ves_icall_System_Net_Sockets_Socket_SupportPortReuse))
-ICALL(SOCK_21a, "cancel_blocking_socket_operation", icall_cancel_blocking_socket_operation)
+HANDLES(ICALL(SOCK_21a, "cancel_blocking_socket_operation", icall_cancel_blocking_socket_operation))
 
 ICALL_TYPE(SOCKEX, "System.Net.Sockets.SocketException", SOCKEX_1)
 ICALL(SOCKEX_1, "WSAGetLastError_internal", ves_icall_System_Net_Sockets_SocketException_WSAGetLastError_internal)
index 9c58e5437f64ada0ee92b595d60f70b7cdb0d84c..bd802a67bb1c2c1f7c07a14c70e3b1e9f8a8c468 100644 (file)
@@ -2850,14 +2850,14 @@ mono_network_cleanup (void)
 }
 
 void
-icall_cancel_blocking_socket_operation (MonoThread *thread)
+icall_cancel_blocking_socket_operation (MonoThreadObjectHandle thread, MonoError *error)
 {
-       MonoInternalThread *internal;
-
-       internal = thread->internal_thread;
-       g_assert (internal);
+       error_init (error);
+       MonoInternalThreadHandle internal = MONO_HANDLE_NEW_GET (MonoInternalThread, thread, internal_thread);
+       g_assert (!MONO_HANDLE_IS_NULL (internal));
 
-       mono_thread_info_abort_socket_syscall_for_close (MONO_UINT_TO_NATIVE_THREAD_ID (internal->tid));
+       guint64 tid = mono_internal_thread_handle_ptr (internal)->tid;
+       mono_thread_info_abort_socket_syscall_for_close (MONO_UINT_TO_NATIVE_THREAD_ID (tid));
 }
 
 #endif /* #ifndef DISABLE_SOCKETS */
index d060af1e267f1272c7e73f63882220155d79a947..1788e2175bd517655a0c2125a03587ec53b7b38d 100644 (file)
@@ -284,7 +284,7 @@ ves_icall_System_Net_Sockets_Socket_SendFile_internal (gsize sock, MonoStringHan
                                                       gint flags, gint32 *werror, gboolean blocking, MonoError *error);
 
 void
-icall_cancel_blocking_socket_operation (MonoThread *thread);
+icall_cancel_blocking_socket_operation (MonoThreadObjectHandle thread, MonoError *error);
 
 gboolean
 ves_icall_System_Net_Sockets_Socket_SupportPortReuse (MonoProtocolType proto, MonoError *error);