Ignore:
Timestamp:
Oct 20, 1999, 12:11:00 PM (26 years ago)
Author:
phaller
Message:

Fix: WSA async rewrite

File:
1 edited

Legend:

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

    r1372 r1373  
    1 /* $Id: async.cpp,v 1.2 1999-10-20 10:03:52 phaller Exp $ */
     1/* $Id: async.cpp,v 1.3 1999-10-20 10:09:49 phaller Exp $ */
    22
    33/*
     
    129129
    130130    void          pushRequest    (PASYNCREQUEST pRequest); // put request on queue
    131     BOOL          deleteRequest  (PASYNCREQUEST pRequest); // remove particular request
     131    BOOL          cancelAsyncRequest   (PASYNCREQUEST pRequest);
    132132
    133133    // the thread procedure
     
    148148    int           dispatchRequest(PASYNCREQUEST pRequest); // complete request
    149149    PASYNCREQUEST popRequest     (void);                   // get one request from queue
     150    BOOL          deleteRequest  (PASYNCREQUEST pRequest); // remove particular request
    150151
    151152    void          lockQueue      (void);                   // enter mutex
     
    487488 *****************************************************************************/
    488489
     490BOOL WSAAsyncWorker::cancelAsyncRequest(PASYNCREQUEST pRequest)
     491{
     492  PASYNCREQUEST pRequestTemp;
     493  BOOL          rc = TRUE;
     494
     495  lockQueue();
     496
     497  // verify pRequest
     498  // find request (optional, just for verification)
     499  for (pRequestTemp = pRequestHead;
     500       pRequestTemp != NULL;
     501       pRequestTemp = pRequestTemp->pNext)
     502    if (pRequestTemp == pRequest)
     503      break;
     504
     505  // is request in queue ?
     506  if (pRequestTemp == pRequest)
     507  {
     508    // is it busy?
     509    if (pRequest->ulState != RS_BUSY)
     510    {
     511      // if not: set RS_CANCELLED
     512      pRequest->ulState = RS_CANCELLED;
     513    }
     514    else
     515    {
     516      // if busy: ???
     517      dprintf(("WSOCK32:Async: WSAAsyncWorker::cancelAsyncRequest(%08xh, %08xh) how to cancel?\n",
     518               this,
     519               pRequest));
     520      rc = FALSE;
     521    }
     522  }
     523  else
     524    rc = FALSE;
     525
     526  unlockQueue();
     527  return rc;
     528}
     529
     530
     531/*****************************************************************************
     532 * Name      :
     533 * Purpose   :
     534 * Parameters:
     535 * Variables :
     536 * Result    :
     537 * Remark    :
     538 * Status    : UNTESTED STUB
     539 *
     540 * Author    : Patrick Haller [Tue, 1998/06/16 23:00]
     541 *****************************************************************************/
     542
    489543PASYNCREQUEST WSAAsyncWorker::createRequest  (ULONG ulType,
    490544                                              HWND  hwnd,
     
    11671221
    11681222  // remove request from queue
    1169   rc = wsaWorker->deleteRequest(pRequest);
     1223  rc = wsaWorker->cancelAsyncRequest(pRequest);
    11701224  if (rc == TRUE)
    11711225    return 0; // success
Note: See TracChangeset for help on using the changeset viewer.