Alexandre Julliard : ntdll: Get rid of the num_async_io counter in
the TEB.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Jun 5 05:48:12 CDT 2007
Module: wine
Branch: master
Commit: 7c6bc78b9023afd13d1158725c0f0c98670ab9d9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7c6bc78b9023afd13d1158725c0f0c98670ab9d9
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Jun 4 18:17:16 2007 +0200
ntdll: Get rid of the num_async_io counter in the TEB.
---
dlls/ntdll/file.c | 2 --
dlls/ntdll/sync.c | 13 ++++---------
dlls/ws2_32/socket.c | 18 ++----------------
include/thread.h | 7 +++----
4 files changed, 9 insertions(+), 31 deletions(-)
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index b48cc9d..de779f2 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -645,7 +645,6 @@ NTSTATUS WINAPI NtReadFile(HANDLE hFile, HANDLE hEvent,
SERVER_END_REQ;
if (status != STATUS_PENDING) RtlFreeHeap( GetProcessHeap(), 0, fileio );
- else NtCurrentTeb()->num_async_io++;
goto done;
}
else /* synchronous read, wait for the fd to become ready */
@@ -878,7 +877,6 @@ NTSTATUS WINAPI NtWriteFile(HANDLE hFile, HANDLE hEvent,
SERVER_END_REQ;
if (status != STATUS_PENDING) RtlFreeHeap( GetProcessHeap(), 0, fileio );
- else NtCurrentTeb()->num_async_io++;
goto done;
}
else /* synchronous write, wait for the fd to become ready */
diff --git a/dlls/ntdll/sync.c b/dlls/ntdll/sync.c
index ca0605e..134113f 100644
--- a/dlls/ntdll/sync.c
+++ b/dlls/ntdll/sync.c
@@ -671,8 +671,6 @@ static BOOL invoke_apc( const apc_call_t *call, apc_result_t *result )
result->async_io.status = call->async_io.func( call->async_io.user,
call->async_io.sb,
call->async_io.status );
- if (result->async_io.status != STATUS_PENDING)
- NtCurrentTeb()->num_async_io--;
break;
case APC_VIRTUAL_ALLOC:
result->type = call->type;
@@ -973,13 +971,10 @@ NTSTATUS WINAPI NtYieldExecution(void)
*/
NTSTATUS WINAPI NtDelayExecution( BOOLEAN alertable, const LARGE_INTEGER *timeout )
{
- /* if alertable or async I/O in progress, we need to query the server */
- if (alertable || NtCurrentTeb()->num_async_io)
- {
- UINT flags = SELECT_INTERRUPTIBLE;
- if (alertable) flags |= SELECT_ALERTABLE;
- return NTDLL_wait_for_multiple_objects( 0, NULL, flags, timeout, 0 );
- }
+ /* if alertable, we need to query the server */
+ if (alertable)
+ return NTDLL_wait_for_multiple_objects( 0, NULL, SELECT_INTERRUPTIBLE | SELECT_ALERTABLE,
+ timeout, 0 );
if (!timeout || timeout->QuadPart == TIMEOUT_INFINITE) /* sleep forever */
{
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 2b7efdc..542b7ae 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -135,7 +135,6 @@
#include "wsipx.h"
#include "winnt.h"
#include "iphlpapi.h"
-#include "thread.h"
#include "wine/server.h"
#include "wine/debug.h"
#include "wine/unicode.h"
@@ -1328,11 +1327,6 @@ static int WS2_register_async_shutdown( SOCKET s, int type )
HeapFree( GetProcessHeap(), 0, wsa );
return NtStatusToWSAError( status );
}
- else
- NtCurrentTeb()->num_async_io++;
-
- /* Try immediate completion */
- Sleep(0);
return 0;
}
@@ -2681,11 +2675,7 @@ INT WINAPI WSASendTo( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount,
}
SERVER_END_REQ;
- if (err == STATUS_PENDING)
- NtCurrentTeb()->num_async_io++;
- else
- HeapFree( GetProcessHeap(), 0, wsa );
-
+ if (err != STATUS_PENDING) HeapFree( GetProcessHeap(), 0, wsa );
WSASetLastError( NtStatusToWSAError( err ));
return SOCKET_ERROR;
}
@@ -4206,11 +4196,7 @@ INT WINAPI WSARecvFrom( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount,
}
SERVER_END_REQ;
- if (err == STATUS_PENDING)
- NtCurrentTeb()->num_async_io++;
- else
- HeapFree( GetProcessHeap(), 0, wsa );
-
+ if (err != STATUS_PENDING) HeapFree( GetProcessHeap(), 0, wsa );
WSASetLastError( NtStatusToWSAError( err ));
return SOCKET_ERROR;
}
diff --git a/include/thread.h b/include/thread.h
index 68d7ae2..f3dfc0b 100644
--- a/include/thread.h
+++ b/include/thread.h
@@ -53,11 +53,10 @@ typedef struct _TEB
PVOID SystemReserved2[10]; /* 1d4 */
/* The following are Wine-specific fields (NT: GdiTebBatch) */
- DWORD num_async_io; /* 1fc number of pending async I/O in the server */
- ULONG_PTR dpmi_vif; /* 200 protected mode virtual interrupt flag */
- DWORD vm86_pending; /* 204 data for vm86 mode */
+ DWORD dpmi_vif; /* 1fc protected mode virtual interrupt flag */
+ ULONG_PTR vm86_pending; /* 200 data for vm86 mode */
/* here is plenty space for wine specific fields (don't forget to change pad6!!) */
- DWORD pad6[309]; /* 208 */
+ DWORD pad6[310]; /* 204 */
ULONG gdiRgn; /* 6dc */
ULONG gdiPen; /* 6e0 */
More information about the wine-cvs
mailing list