Commit 9ea03d70 authored by Robert Shearman's avatar Robert Shearman Committed by Alexandre Julliard

rpcrt4: Convert the protseq list into a standard Wine list.

parent 1ceeb058
...@@ -66,7 +66,8 @@ typedef struct _RpcObjTypeMap ...@@ -66,7 +66,8 @@ typedef struct _RpcObjTypeMap
static RpcObjTypeMap *RpcObjTypeMaps; static RpcObjTypeMap *RpcObjTypeMaps;
static RpcServerProtseq* protseqs; /* list of type RpcServerProtseq */
static struct list protseqs = LIST_INIT(protseqs);
static RpcServerInterface* ifs; static RpcServerInterface* ifs;
static CRITICAL_SECTION server_cs; static CRITICAL_SECTION server_cs;
...@@ -599,16 +600,15 @@ static RPC_STATUS RPCRT4_start_listen(BOOL auto_listen) ...@@ -599,16 +600,15 @@ static RPC_STATUS RPCRT4_start_listen(BOOL auto_listen)
if (std_listen) if (std_listen)
{ {
cps = protseqs; LIST_FOR_EACH_ENTRY(cps, &protseqs, RpcServerProtseq, entry)
while (cps && status == RPC_S_OK)
{ {
status = RPCRT4_start_listen_protseq(cps, TRUE); status = RPCRT4_start_listen_protseq(cps, TRUE);
if (status != RPC_S_OK)
break;
/* make sure server is actually listening on the interface before /* make sure server is actually listening on the interface before
* returning */ * returning */
if (status == RPC_S_OK) RPCRT4_sync_with_server_thread(cps);
RPCRT4_sync_with_server_thread(cps);
cps = cps->Next;
} }
} }
...@@ -626,11 +626,9 @@ static void RPCRT4_stop_listen(BOOL auto_listen) ...@@ -626,11 +626,9 @@ static void RPCRT4_stop_listen(BOOL auto_listen)
std_listen = FALSE; std_listen = FALSE;
LeaveCriticalSection(&listen_cs); LeaveCriticalSection(&listen_cs);
cps = protseqs; LIST_FOR_EACH_ENTRY(cps, &protseqs, RpcServerProtseq, entry)
while (cps) {
RPCRT4_sync_with_server_thread(cps); RPCRT4_sync_with_server_thread(cps);
cps = cps->Next;
}
return; return;
} }
assert(listen_count >= 0); assert(listen_count >= 0);
...@@ -648,8 +646,7 @@ static RPC_STATUS RPCRT4_use_protseq(RpcServerProtseq* ps) ...@@ -648,8 +646,7 @@ static RPC_STATUS RPCRT4_use_protseq(RpcServerProtseq* ps)
return status; return status;
EnterCriticalSection(&server_cs); EnterCriticalSection(&server_cs);
ps->Next = protseqs; list_add_head(&protseqs, &ps->entry);
protseqs = ps;
LeaveCriticalSection(&server_cs); LeaveCriticalSection(&server_cs);
if (std_listen) if (std_listen)
...@@ -680,14 +677,12 @@ RPC_STATUS WINAPI RpcServerInqBindings( RPC_BINDING_VECTOR** BindingVector ) ...@@ -680,14 +677,12 @@ RPC_STATUS WINAPI RpcServerInqBindings( RPC_BINDING_VECTOR** BindingVector )
EnterCriticalSection(&server_cs); EnterCriticalSection(&server_cs);
/* count connections */ /* count connections */
count = 0; count = 0;
ps = protseqs; LIST_FOR_EACH_ENTRY(ps, &protseqs, RpcServerProtseq, entry) {
while (ps) {
conn = ps->conn; conn = ps->conn;
while (conn) { while (conn) {
count++; count++;
conn = conn->Next; conn = conn->Next;
} }
ps = ps->Next;
} }
if (count) { if (count) {
/* export bindings */ /* export bindings */
...@@ -696,8 +691,7 @@ RPC_STATUS WINAPI RpcServerInqBindings( RPC_BINDING_VECTOR** BindingVector ) ...@@ -696,8 +691,7 @@ RPC_STATUS WINAPI RpcServerInqBindings( RPC_BINDING_VECTOR** BindingVector )
sizeof(RPC_BINDING_HANDLE)*(count-1)); sizeof(RPC_BINDING_HANDLE)*(count-1));
(*BindingVector)->Count = count; (*BindingVector)->Count = count;
count = 0; count = 0;
ps = protseqs; LIST_FOR_EACH_ENTRY(ps, &protseqs, RpcServerProtseq, entry) {
while (ps) {
conn = ps->conn; conn = ps->conn;
while (conn) { while (conn) {
RPCRT4_MakeBinding((RpcBinding**)&(*BindingVector)->BindingH[count], RPCRT4_MakeBinding((RpcBinding**)&(*BindingVector)->BindingH[count],
...@@ -705,7 +699,6 @@ RPC_STATUS WINAPI RpcServerInqBindings( RPC_BINDING_VECTOR** BindingVector ) ...@@ -705,7 +699,6 @@ RPC_STATUS WINAPI RpcServerInqBindings( RPC_BINDING_VECTOR** BindingVector )
count++; count++;
conn = conn->Next; conn = conn->Next;
} }
ps = ps->Next;
} }
status = RPC_S_OK; status = RPC_S_OK;
} else { } else {
...@@ -1022,7 +1015,7 @@ RPC_STATUS WINAPI RpcServerListen( UINT MinimumCallThreads, UINT MaxCalls, UINT ...@@ -1022,7 +1015,7 @@ RPC_STATUS WINAPI RpcServerListen( UINT MinimumCallThreads, UINT MaxCalls, UINT
TRACE("(%u,%u,%u)\n", MinimumCallThreads, MaxCalls, DontWait); TRACE("(%u,%u,%u)\n", MinimumCallThreads, MaxCalls, DontWait);
if (!protseqs) if (list_empty(&protseqs))
return RPC_S_NO_PROTSEQS_REGISTERED; return RPC_S_NO_PROTSEQS_REGISTERED;
status = RPCRT4_start_listen(FALSE); status = RPCRT4_start_listen(FALSE);
......
...@@ -22,13 +22,14 @@ ...@@ -22,13 +22,14 @@
#define __WINE_RPC_SERVER_H #define __WINE_RPC_SERVER_H
#include "rpc_binding.h" #include "rpc_binding.h"
#include "wine/list.h"
struct protseq_ops; struct protseq_ops;
typedef struct _RpcServerProtseq typedef struct _RpcServerProtseq
{ {
const struct protseq_ops *ops; const struct protseq_ops *ops;
struct _RpcServerProtseq* Next; struct list entry;
LPSTR Protseq; LPSTR Protseq;
LPSTR Endpoint; LPSTR Endpoint;
UINT MaxCalls; UINT MaxCalls;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment