rem: connPtr->drvPtr  = drvPtr;
add: connPtr->drvPtr = sockPtr->drvPtr;
context: NsQueueConn(Sock *sockPtr, Ns_Time *nowPtr){    Driver *drvPtr = sockPtr->drvPtr;    NsServer *servPtr = drvPtr->servPtr;    Tcl_HashEntry *hPtr;    ConnPool *poolPtr = NULL;    Conn *connPtr = NULL;    int create = 0;    char *host;    /*     * Check for Host: header based virtual server selection.     */    if (servPtr == NULL && sockPtr->reqPtr != NULL) {	host = Ns_SetIGet(sockPtr->reqPtr->headers, "Host");	if (host != NULL) {	    hPtr = Tcl_FindHashEntry(&hosts, host);	    if (hPtr != NULL) {		servPtr = Tcl_GetHashValue(hPtr);	    }	}fprintf(stderr, "%s %p\n", host, servPtr);    }    if (servPtr == NULL) {	return 0;    }    /*     * Select connection pool.     */    if (sockPtr->reqPtr != NULL) {	poolPtr = Ns_UrlSpecificGet(servPtr->server,			sockPtr->reqPtr->request->method,			sockPtr->reqPtr->request->url, poolid);    }    if (poolPtr == NULL) {	poolPtr = servPtr->pools.defaultPtr;    }   /*    * Queue connection if a free Conn is available.    */    Ns_MutexLock(&servPtr->pools.lock);    if (!servPtr->pools.shutdown) {	connPtr = poolPtr->queue.freePtr;	if (connPtr != NULL) {	    poolPtr->queue.freePtr = connPtr->nextPtr;	    connPtr->startTime = *nowPtr;	    connPtr->id = servPtr->pools.nextconnid++;	    connPtr->sockPtr = sockPtr;	    connPtr->drvPtr  = drvPtr;	    connPtr->servPtr = servPtr;	    if (poolPtr->queue.wait.firstPtr == NULL) {		poolPtr->queue.wait.firstPtr = connPtr;	    } else {		poolPtr->queue.wait.lastPtr->nextPtr = connPtr;	    }	    poolPtr->queue.wait.lastPtr = connPtr;	    connPtr->nextPtr = NULL;	    if (poolPtr->threads.idle == 0 && poolPtr->threads.current < poolPtr->threads.max) {		++poolPtr->threads.idle;		++poolPtr->threads.current;		create = 1;	    }	    ++poolPtr->queue.wait.num;	}    }    Ns_MutexUnlock(&servPtr->pools.lock);    if (connPtr == NULL) {	return 0;    }    if (create) {    	CreateConnThread(poolPtr);    } else {	Ns_CondSignal(&poolPtr->queue.cond);    }    return 1;}