mirror of
https://github.com/reactos/reactos.git
synced 2024-12-30 19:14:31 +00:00
Sync to Wine-20050524:
Alexandre Julliard <julliard@winehq.org> - Added rules for building import libraries in the individual dll makefiles, and added support for building a .def.a static import library too. Vincent Beron <vberon@mecano.gme.usherb.ca> - Provide minimal API documentation in advapi/eventlog.c to silence some winapi_check output. - Move around functions in riched20, richedit and rpcrt4 to achieve the same goal. Robert Shearman <rob@codeweavers.com> - Fix RpcServerListen so that it doesn't return RPC_S_ALREADY_LISTENING when the only interfaces it is listening on are auto listens. - Only synchronize with server thread when necessary and move this into RpcMgmtWaitServerListen. Francois Gouget <fgouget@free.fr> - Tweak the API documentation to silence winapi_check warnings. Hartmut Birr <hartmut.birr@gmx.de> - Clean up if named pipe is not available. (merge back from WineHQ) svn path=/trunk/; revision=15581
This commit is contained in:
parent
98b2118f6b
commit
020f1fc22b
5 changed files with 36 additions and 41 deletions
|
@ -4,6 +4,7 @@ TOPOBJDIR = ../..
|
||||||
SRCDIR = @srcdir@
|
SRCDIR = @srcdir@
|
||||||
VPATH = @srcdir@
|
VPATH = @srcdir@
|
||||||
MODULE = rpcrt4.dll
|
MODULE = rpcrt4.dll
|
||||||
|
IMPORTLIB = librpcrt4.$(IMPLIBEXT)
|
||||||
IMPORTS = iphlpapi advapi32 kernel32 ntdll
|
IMPORTS = iphlpapi advapi32 kernel32 ntdll
|
||||||
EXTRALIBS = -luuid
|
EXTRALIBS = -luuid
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,11 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(ole);
|
WINE_DEFAULT_DEBUG_CHANNEL(ole);
|
||||||
|
|
||||||
LONG_PTR /* CLIENT_CALL_RETURN */ RPCRT4_NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pFormat, va_list args)
|
/***********************************************************************
|
||||||
|
* Note: this should return a CLIENT_CALL_RETURN, but calling convention for
|
||||||
|
* returning structures/unions is different between Windows and gcc on i386.
|
||||||
|
*/
|
||||||
|
LONG_PTR RPCRT4_NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pFormat, va_list args)
|
||||||
{
|
{
|
||||||
|
|
||||||
RPC_CLIENT_INTERFACE *rpc_cli_if = (RPC_CLIENT_INTERFACE *)(pStubDesc->RpcInterfaceInformation);
|
RPC_CLIENT_INTERFACE *rpc_cli_if = (RPC_CLIENT_INTERFACE *)(pStubDesc->RpcInterfaceInformation);
|
||||||
|
@ -83,8 +87,11 @@ LONG_PTR /* CLIENT_CALL_RETURN */ RPCRT4_NdrClientCall2(PMIDL_STUB_DESC pStubDes
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* NdrClientCall2 [RPCRT4.@]
|
* NdrClientCall2 [RPCRT4.@]
|
||||||
|
*
|
||||||
|
* Note: this should return a CLIENT_CALL_RETURN, but calling convention for
|
||||||
|
* returning structures/unions is different between Windows and gcc on i386.
|
||||||
*/
|
*/
|
||||||
LONG_PTR /* CLIENT_CALL_RETURN */ WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc,
|
LONG_PTR WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc,
|
||||||
PFORMAT_STRING pFormat, ...)
|
PFORMAT_STRING pFormat, ...)
|
||||||
{
|
{
|
||||||
LONG_PTR ret;
|
LONG_PTR ret;
|
||||||
|
|
|
@ -103,8 +103,6 @@ static HANDLE mgr_event;
|
||||||
static HANDLE mgr_mutex;
|
static HANDLE mgr_mutex;
|
||||||
/* set when server thread has finished opening connections */
|
/* set when server thread has finished opening connections */
|
||||||
static HANDLE server_ready_event;
|
static HANDLE server_ready_event;
|
||||||
/* thread that waits for connections */
|
|
||||||
static HANDLE server_thread;
|
|
||||||
|
|
||||||
static CRITICAL_SECTION spacket_cs;
|
static CRITICAL_SECTION spacket_cs;
|
||||||
static CRITICAL_SECTION_DEBUG spacket_cs_debug =
|
static CRITICAL_SECTION_DEBUG spacket_cs_debug =
|
||||||
|
@ -587,14 +585,18 @@ static void RPCRT4_sync_with_server_thread(void)
|
||||||
ReleaseMutex(mgr_mutex);
|
ReleaseMutex(mgr_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RPCRT4_start_listen(BOOL auto_listen)
|
static RPC_STATUS RPCRT4_start_listen(BOOL auto_listen)
|
||||||
{
|
{
|
||||||
|
RPC_STATUS status = RPC_S_ALREADY_LISTENING;
|
||||||
|
|
||||||
TRACE("\n");
|
TRACE("\n");
|
||||||
|
|
||||||
EnterCriticalSection(&listen_cs);
|
EnterCriticalSection(&listen_cs);
|
||||||
if (auto_listen || (manual_listen_count++ == 0))
|
if (auto_listen || (manual_listen_count++ == 0))
|
||||||
{
|
{
|
||||||
|
status = RPC_S_OK;
|
||||||
if (++listen_count == 1) {
|
if (++listen_count == 1) {
|
||||||
|
HANDLE server_thread;
|
||||||
/* first listener creates server thread */
|
/* first listener creates server thread */
|
||||||
if (!mgr_mutex) mgr_mutex = CreateMutexW(NULL, FALSE, NULL);
|
if (!mgr_mutex) mgr_mutex = CreateMutexW(NULL, FALSE, NULL);
|
||||||
if (!mgr_event) mgr_event = CreateEventW(NULL, FALSE, FALSE, NULL);
|
if (!mgr_event) mgr_event = CreateEventW(NULL, FALSE, FALSE, NULL);
|
||||||
|
@ -603,13 +605,12 @@ static void RPCRT4_start_listen(BOOL auto_listen)
|
||||||
if (!worker_tls) worker_tls = TlsAlloc();
|
if (!worker_tls) worker_tls = TlsAlloc();
|
||||||
std_listen = TRUE;
|
std_listen = TRUE;
|
||||||
server_thread = CreateThread(NULL, 0, RPCRT4_server_thread, NULL, 0, NULL);
|
server_thread = CreateThread(NULL, 0, RPCRT4_server_thread, NULL, 0, NULL);
|
||||||
} else {
|
CloseHandle(server_thread);
|
||||||
LeaveCriticalSection(&listen_cs);
|
|
||||||
RPCRT4_sync_with_server_thread();
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LeaveCriticalSection(&listen_cs);
|
LeaveCriticalSection(&listen_cs);
|
||||||
|
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RPCRT4_stop_listen(BOOL auto_listen)
|
static void RPCRT4_stop_listen(BOOL auto_listen)
|
||||||
|
@ -977,23 +978,16 @@ RPC_STATUS WINAPI RpcServerRegisterAuthInfoW( LPWSTR ServerPrincName, unsigned l
|
||||||
*/
|
*/
|
||||||
RPC_STATUS WINAPI RpcServerListen( UINT MinimumCallThreads, UINT MaxCalls, UINT DontWait )
|
RPC_STATUS WINAPI RpcServerListen( UINT MinimumCallThreads, UINT MaxCalls, UINT DontWait )
|
||||||
{
|
{
|
||||||
|
RPC_STATUS status;
|
||||||
|
|
||||||
TRACE("(%u,%u,%u)\n", MinimumCallThreads, MaxCalls, DontWait);
|
TRACE("(%u,%u,%u)\n", MinimumCallThreads, MaxCalls, DontWait);
|
||||||
|
|
||||||
if (!protseqs)
|
if (!protseqs)
|
||||||
return RPC_S_NO_PROTSEQS_REGISTERED;
|
return RPC_S_NO_PROTSEQS_REGISTERED;
|
||||||
|
|
||||||
EnterCriticalSection(&listen_cs);
|
status = RPCRT4_start_listen(FALSE);
|
||||||
|
|
||||||
if (std_listen) {
|
if (DontWait || (status != RPC_S_OK)) return status;
|
||||||
LeaveCriticalSection(&listen_cs);
|
|
||||||
return RPC_S_ALREADY_LISTENING;
|
|
||||||
}
|
|
||||||
|
|
||||||
RPCRT4_start_listen(FALSE);
|
|
||||||
|
|
||||||
LeaveCriticalSection(&listen_cs);
|
|
||||||
|
|
||||||
if (DontWait) return RPC_S_OK;
|
|
||||||
|
|
||||||
return RpcMgmtWaitServerListen();
|
return RpcMgmtWaitServerListen();
|
||||||
}
|
}
|
||||||
|
@ -1003,29 +997,20 @@ RPC_STATUS WINAPI RpcServerListen( UINT MinimumCallThreads, UINT MaxCalls, UINT
|
||||||
*/
|
*/
|
||||||
RPC_STATUS WINAPI RpcMgmtWaitServerListen( void )
|
RPC_STATUS WINAPI RpcMgmtWaitServerListen( void )
|
||||||
{
|
{
|
||||||
RPC_STATUS rslt = RPC_S_OK;
|
TRACE("()\n");
|
||||||
|
|
||||||
TRACE("\n");
|
|
||||||
|
|
||||||
EnterCriticalSection(&listen_cs);
|
EnterCriticalSection(&listen_cs);
|
||||||
|
|
||||||
if (!std_listen)
|
if (!std_listen) {
|
||||||
if ( (rslt = RpcServerListen(1, 0, TRUE)) != RPC_S_OK ) {
|
LeaveCriticalSection(&listen_cs);
|
||||||
LeaveCriticalSection(&listen_cs);
|
return RPC_S_NOT_LISTENING;
|
||||||
return rslt;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
LeaveCriticalSection(&listen_cs);
|
LeaveCriticalSection(&listen_cs);
|
||||||
|
|
||||||
while (std_listen) {
|
RPCRT4_sync_with_server_thread();
|
||||||
WaitForSingleObject(mgr_event, INFINITE);
|
|
||||||
if (!std_listen) {
|
|
||||||
Sleep(100); /* don't spin violently */
|
|
||||||
TRACE("spinning.\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return rslt;
|
return RPC_S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
|
|
@ -767,7 +767,10 @@ BOOL RPCRT4_RPCSSOnDemandCall(PRPCSS_NP_MESSAGE msg, char *vardata_payload, PRPC
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DceErrorInqText
|
#define MAX_RPC_ERROR_TEXT 256
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* DceErrorInqTextW (rpcrt4.@)
|
||||||
*
|
*
|
||||||
* Notes
|
* Notes
|
||||||
* 1. On passing a NULL pointer the code does bomb out.
|
* 1. On passing a NULL pointer the code does bomb out.
|
||||||
|
@ -778,9 +781,6 @@ BOOL RPCRT4_RPCSSOnDemandCall(PRPCSS_NP_MESSAGE msg, char *vardata_payload, PRPC
|
||||||
* 4. The MSDN documentation currently declares that the second argument is
|
* 4. The MSDN documentation currently declares that the second argument is
|
||||||
* unsigned char *, even for the W version. I don't believe it.
|
* unsigned char *, even for the W version. I don't believe it.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MAX_RPC_ERROR_TEXT 256
|
|
||||||
|
|
||||||
RPC_STATUS RPC_ENTRY DceErrorInqTextW (RPC_STATUS e, unsigned short *buffer)
|
RPC_STATUS RPC_ENTRY DceErrorInqTextW (RPC_STATUS e, unsigned short *buffer)
|
||||||
{
|
{
|
||||||
DWORD count;
|
DWORD count;
|
||||||
|
@ -801,6 +801,9 @@ RPC_STATUS RPC_ENTRY DceErrorInqTextW (RPC_STATUS e, unsigned short *buffer)
|
||||||
return RPC_S_OK;
|
return RPC_S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* DceErrorInqTextA (rpcrt4.@)
|
||||||
|
*/
|
||||||
RPC_STATUS RPC_ENTRY DceErrorInqTextA (RPC_STATUS e, unsigned char *buffer)
|
RPC_STATUS RPC_ENTRY DceErrorInqTextA (RPC_STATUS e, unsigned char *buffer)
|
||||||
{
|
{
|
||||||
RPC_STATUS status;
|
RPC_STATUS status;
|
||||||
|
|
|
@ -84,7 +84,6 @@ HANDLE RPCRT4_RpcssNPConnect(void)
|
||||||
if (! WaitNamedPipeA(NAME_RPCSS_NAMED_PIPE, MASTER_MUTEX_WAITNAMEDPIPE_TIMEOUT))
|
if (! WaitNamedPipeA(NAME_RPCSS_NAMED_PIPE, MASTER_MUTEX_WAITNAMEDPIPE_TIMEOUT))
|
||||||
{
|
{
|
||||||
ERR("Named pipe unavailable after waiting. Something is probably wrong.\n");
|
ERR("Named pipe unavailable after waiting. Something is probably wrong.\n");
|
||||||
CloseHandle(the_pipe);
|
|
||||||
the_pipe = NULL;
|
the_pipe = NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue