diff options
Diffstat (limited to 'protocols/SkypeWeb/src/request_queue.cpp')
| -rw-r--r-- | protocols/SkypeWeb/src/request_queue.cpp | 32 | 
1 files changed, 24 insertions, 8 deletions
diff --git a/protocols/SkypeWeb/src/request_queue.cpp b/protocols/SkypeWeb/src/request_queue.cpp index 2a7e384a8f..e932dc363d 100644 --- a/protocols/SkypeWeb/src/request_queue.cpp +++ b/protocols/SkypeWeb/src/request_queue.cpp @@ -64,6 +64,12 @@ void RequestQueue::Push(HttpRequest *request, HttpResponseCallback response, voi  	SetEvent(hRequestQueueEvent);
  }
 +void RequestQueue::Send(HttpRequest *request, HttpResponseCallback response, void *arg)
 +{
 +	RequestQueueItem *item = new RequestQueueItem(request, response, arg);
 +	mir_forkthreadowner((pThreadFuncOwner)&RequestQueue::AsyncSendThread, this, item, 0);
 +}
 +
  void RequestQueue::Execute(RequestQueueItem *item)
  {
  	NETLIBHTTPREQUEST *response = item->request->Send(hConnection);
 @@ -74,27 +80,37 @@ void RequestQueue::Execute(RequestQueueItem *item)  	delete item;
  }
 -unsigned int RequestQueue::WorkerThread(void* owner, void*)
 +unsigned int RequestQueue::AsyncSendThread(void *owner, void *arg)
  {
  	RequestQueue *that = (RequestQueue*)owner;
 +	RequestQueueItem *item = (RequestQueueItem*)arg;
 +
 +	that->Execute(item);
 +
 +	return 0;
 +}
 +
 +unsigned int RequestQueue::WorkerThread(void *arg)
 +{
 +	RequestQueue *queue = (RequestQueue*)arg;
 -	while (!that->isTerminated)
 +	while (!queue->isTerminated)
  	{
 -		WaitForSingleObject(that->hRequestQueueEvent, INFINITE);
 +		WaitForSingleObject(queue->hRequestQueueEvent, INFINITE);
  		while (true)
  		{
  			RequestQueueItem *item = NULL;
  			{
 -				mir_cslock lock(that->requestQueueLock);
 +				mir_cslock lock(queue->requestQueueLock);
 -				if (that->requests.getCount() == 0)
 +				if (queue->requests.getCount() == 0)
  					break;
 -				item = that->requests[0];
 -				that->requests.remove(0);
 +				item = queue->requests[0];
 +				queue->requests.remove(0);
  			}
  			if (item != NULL)
 -				that->Execute(item);
 +				queue->Execute(item);
  		}
  	}
  | 
