1
0
mirror of https://github.com/solemnwarning/ipxwrapper synced 2024-12-30 16:45:37 +01:00

Some bugfixes in the DirectPlay service provider code.

This commit is contained in:
Daniel Collins 2011-09-11 12:03:38 +00:00
parent 616859cc13
commit ee30a6200f
4 changed files with 16 additions and 9 deletions

View File

@ -128,11 +128,15 @@ static DWORD WINAPI worker_main(LPVOID sp) {
}
if(!recv_packet(sp_data->sock, buf, sp)) {
release_sp_data((IDirectPlaySP*)sp);
return 1;
}
if(sp_data->ns_sock != -1 && recv_packet(sp_data->ns_sock, buf, sp)) {
return 1;
if(sp_data->ns_sock != -1 && !recv_packet(sp_data->ns_sock, buf, sp)) {
log_printf("Closing ns_sock due to error");
closesocket(sp_data->ns_sock);
sp_data->ns_sock = -1;
}
release_sp_data((IDirectPlaySP*)sp);
@ -354,7 +358,7 @@ static HRESULT WINAPI IPX_Open(LPDPSP_OPENDATA data) {
memcpy(&addr, &(sp_data->addr), sizeof(addr));
addr.sa_socket = htons(DISCOVERY_SOCKET);
if(bind(sp_data->ns_sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
closesocket(sp_data->ns_sock);
sp_data->ns_sock = -1;
@ -365,7 +369,7 @@ static HRESULT WINAPI IPX_Open(LPDPSP_OPENDATA data) {
return DPERR_CANNOTCREATESERVER;
}
if(WSAEventSelect(sp_data->sock, sp_data->event, FD_READ) == -1) {
if(WSAEventSelect(sp_data->ns_sock, sp_data->event, FD_READ) == -1) {
closesocket(sp_data->ns_sock);
sp_data->ns_sock = -1;
@ -403,11 +407,12 @@ static HRESULT WINAPI IPX_ShutdownEx(LPDPSP_SHUTDOWNDATA data) {
struct sp_data *sp_data = get_sp_data(data->lpISP);
sp_data->running = FALSE;
WSASetEvent(sp_data->event);
release_sp_data(data->lpISP);
if(sp_data->worker_thread) {
sp_data->running = FALSE;
release_sp_data(data->lpISP);
if(WaitForSingleObject(sp_data->worker_thread, 3000) == WAIT_TIMEOUT) {
log_printf("DirectPlay worker didn't exit in 3 seconds, killing");
TerminateThread(sp_data->worker_thread, 0);

View File

@ -19,3 +19,4 @@ EXPORTS
WSACloseEvent
WSAEventSelect
WSAResetEvent
WSASetEvent

View File

@ -16,6 +16,7 @@ WSACreateEvent
WSAEventSelect
WSACloseEvent
WSAResetEvent
WSASetEvent
r_EnumProtocolsA
r_EnumProtocolsW
r_WSARecvEx

View File

@ -716,7 +716,7 @@ void rclient_stop(struct rclient *rclient) {
EnterCriticalSection(&(rclient->router->crit_sec));
rclient->router->running = FALSE;
SetEvent(rclient->router->wsa_event);
WSASetEvent(rclient->router->wsa_event);
LeaveCriticalSection(&(rclient->router->crit_sec));