Fixed HTTP proxy threading problems.
This commit is contained in:
		
							parent
							
								
									58c17a6374
								
							
						
					
					
						commit
						cb90d6da2e
					
				
					 1 changed files with 7 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -76,11 +76,12 @@ namespace Connector_HTTP {
 | 
			
		|||
        }
 | 
			
		||||
        std::map<std::string, ConnConn*>::iterator it;
 | 
			
		||||
        for (it = connectorConnections.begin(); it != connectorConnections.end(); it++){
 | 
			
		||||
          if ( !it->second->conn->connected() || it->second->lastUse++ > 15){
 | 
			
		||||
            if (it->second->inUse.try_lock()){
 | 
			
		||||
              it->second->inUse.unlock();
 | 
			
		||||
              delete it->second;
 | 
			
		||||
          ConnConn* ccPointer = it->second;
 | 
			
		||||
          if ( !ccPointer->conn->connected() || ccPointer->lastUse++ > 15){
 | 
			
		||||
            if (ccPointer->inUse.try_lock()){
 | 
			
		||||
              connectorConnections.erase(it);
 | 
			
		||||
              ccPointer->inUse.unlock();
 | 
			
		||||
              delete ccPointer;
 | 
			
		||||
              it = connectorConnections.begin(); //get a valid iterator
 | 
			
		||||
              if (it == connectorConnections.end()){
 | 
			
		||||
                return;
 | 
			
		||||
| 
						 | 
				
			
			@ -328,12 +329,12 @@ namespace Connector_HTTP {
 | 
			
		|||
      timeouter = new tthread::thread(Connector_HTTP::proxyTimeoutThread, 0);
 | 
			
		||||
      timeoutMutex.unlock();
 | 
			
		||||
    }
 | 
			
		||||
    connMutex.unlock();
 | 
			
		||||
 | 
			
		||||
    //lock the mutex for this connection, and handle the request
 | 
			
		||||
    tthread::lock_guard<tthread::mutex> guard(connectorConnections[uid]->inUse);
 | 
			
		||||
    connMutex.unlock();
 | 
			
		||||
    //if the server connection is dead, handle as timeout.
 | 
			
		||||
    if ( !connectorConnections.count(uid) || !connectorConnections[uid]->conn->connected()){
 | 
			
		||||
    if ( !connectorConnections[uid]->conn->connected()){
 | 
			
		||||
      connectorConnections[uid]->conn->close();
 | 
			
		||||
      return proxyHandleTimeout(H, conn);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue