Changeset 5625 for trunk/src


Ignore:
Timestamp:
Apr 28, 2001, 6:15:18 PM (24 years ago)
Author:
sandervl
Message:

YD: fixes for opera

Location:
trunk/src/wsock32
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wsock32/asyncapi.cpp

    r3557 r5625  
    1 /* $Id: asyncapi.cpp,v 1.8 2000-05-18 22:54:20 sandervl Exp $ */
     1/* $Id: asyncapi.cpp,v 1.9 2001-04-28 16:15:18 sandervl Exp $ */
    22
    33/*
     
    437437        if(lEventsPending == 0)
    438438        {
     439                dprintf2(("WSAsyncSelectThreadProc: waiting for new events"));
    439440                //wait for events to be enabled
    440441                pThreadParm->u.asyncselect.asyncSem->wait();
     
    460461        }
    461462
    462 ////        dprintf(("WSAsyncSelectThreadProc %x rds=%d, wrs=%d, oos =%d, pending = %x", pThreadParm->u.asyncselect.s, noread, nowrite, noexcept, lEventsPending));
     463        dprintf2(("WSAsyncSelectThreadProc %x rds=%d, wrs=%d, oos =%d, pending = %x", pThreadParm->u.asyncselect.s, noread, nowrite, noexcept, lEventsPending));
    463464
    464465        pThreadParm->fWaitSelect = TRUE;
     
    467468        if(ret == SOCKET_ERROR) {
    468469                int selecterr = sock_errno();
    469 ////            dprintf(("WSAsyncSelectThreadProc %x rds=%d, wrs=%d, oos =%d, pending = %x select returned %x", pThreadParm->u.asyncselect.s, noread, nowrite, noexcept, lEventsPending, selecterr));
     470                dprintf2(("WSAsyncSelectThreadProc %x rds=%d, wrs=%d, oos =%d, pending = %x select returned %x", pThreadParm->u.asyncselect.s, noread, nowrite, noexcept, lEventsPending, selecterr));
    470471                if(selecterr && selecterr < SOCBASEERR) {
    471472                        selecterr += SOCBASEERR;
     
    561562                        }
    562563                }
    563                 if((lEventsPending & FD_READ) && bytesread > 0) {
     564                if((lEventsPending & FD_READ) && bytesread >= 0) {
    564565                        AsyncNotifyEvent(pThreadParm, FD_READ, NO_ERROR);
    565566                }
  • trunk/src/wsock32/asyncthread.cpp

    r3557 r5625  
    1 /* $Id: asyncthread.cpp,v 1.6 2000-05-18 22:54:21 sandervl Exp $ */
     1/* $Id: asyncthread.cpp,v 1.7 2001-04-28 16:15:18 sandervl Exp $ */
    22
    33/*
     
    3030//******************************************************************************
    3131//******************************************************************************
    32 static void APIENTRY AsyncThread(ULONG arg)
     32static void _Optlink AsyncThread(void *arg)
    3333{
    3434 PASYNCTHREADPARM pThreadParm = (PASYNCTHREADPARM)arg;
     
    4848ULONG QueueAsyncJob(ASYNCTHREADPROC asyncproc, PASYNCTHREADPARM pThreadParm, BOOL fSetBlocking)
    4949{
    50  APIRET rc;
    51  TID    tid;
     50 TID tid;
    5251
    5352   pThreadParm->asyncProc         = asyncproc;
     
    6261   if(fSetBlocking) WSASetBlocking(TRUE);
    6362
    64    rc = DosCreateThread(&tid, AsyncThread, (ULONG)pThreadParm, CREATE_READY, 16384);
    65    if(rc)
    66    {
    67         dprintf(("QueueAsyncJob: DosCreateThread failed with error %x", rc));
     63   tid = _beginthread(AsyncThread, NULL, 16384, (PVOID)pThreadParm);
     64   if (tid == -1) {
     65        dprintf(("QueueAsyncJob: _beginthread failed"));
    6866        if(fSetBlocking) WSASetBlocking(FALSE);
    6967        RemoveFromQueue(pThreadParm);
     
    166164#endif
    167165   return SOCKET_ERROR;
     166}
     167//******************************************************************************
     168//dump queue
     169//******************************************************************************
     170void DumpQueue(void)
     171{
     172 HANDLE hThread = GetCurrentThread();
     173 PASYNCTHREADPARM pThreadInfo;
     174
     175   dprintf(("DumpQueue"));
     176
     177   asyncThreadMutex.enter();
     178   pThreadInfo = threadList;
     179
     180   while(pThreadInfo) {
     181        dprintf(( "SOCKET %08xh thread#%d events %xh pending %xh, select %d",
     182                pThreadInfo->u.asyncselect.s,
     183                pThreadInfo->hAsyncTaskHandle,
     184                pThreadInfo->u.asyncselect.lEvents,
     185                pThreadInfo->u.asyncselect.lEventsPending,
     186                pThreadInfo->fWaitSelect));
     187        pThreadInfo = pThreadInfo->next;
     188   }
     189   asyncThreadMutex.leave();
     190   dprintf(("DumpQueue done"));
    168191}
    169192//******************************************************************************
  • trunk/src/wsock32/wsock32.cpp

    r4860 r5625  
    1 /* $Id: wsock32.cpp,v 1.34 2000-12-30 14:07:24 sandervl Exp $ */
     1/* $Id: wsock32.cpp,v 1.35 2001-04-28 16:15:18 sandervl Exp $ */
    22
    33/*
     
    235235        return SOCKET_ERROR;
    236236   }
    237    ret = soclose(s);
    238237   //Close WSAAsyncSelect thread if one was created for this socket
    239238   FindAndSetAsyncEvent(s, 0, 0, 0);
     239
     240   // wait thread termination
     241   DosSleep(10);
     242   ret = soclose(s);
    240243
    241244   if(ret == SOCKET_ERROR) {
     
    603606                dprintf(("recv returned 0, but socket is still connected -> return WSAWOULDBLOCK"));
    604607                WSASetLastError(WSAEWOULDBLOCK);
    605                 ret = SOCKET_ERROR;
     608                ret = 0; //graceful close
    606609        }
    607610   }
Note: See TracChangeset for help on using the changeset viewer.