| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1776,13 +1776,18 @@ static bool proxy_alive(ckpool_t *ckp, proxy_instance_t *proxi, connsock_t *cs, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						bool ret = false; | 
					 | 
					 | 
					 | 
						bool ret = false; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						/* Has this proxy already been reconnected? */ | 
					 | 
					 | 
					 | 
						/* Has this proxy already been reconnected? */ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (cs->fd > 0) | 
					 | 
					 | 
					 | 
						if (proxi->alive) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							return true; | 
					 | 
					 | 
					 | 
							return true; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (proxi->disabled) | 
					 | 
					 | 
					 | 
						if (proxi->disabled) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							return false; | 
					 | 
					 | 
					 | 
							return false; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						/* Serialise all send/recvs here with the cs semaphore */ | 
					 | 
					 | 
					 | 
						/* Serialise all send/recvs here with the cs semaphore */ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						cksem_wait(&cs->sem); | 
					 | 
					 | 
					 | 
						cksem_wait(&cs->sem); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						/* Check again after grabbing semaphore */ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						if (unlikely(proxi->alive)) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							ret = true; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							goto out; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (!extract_sockaddr(proxi->url, &cs->url, &cs->port)) { | 
					 | 
					 | 
					 | 
						if (!extract_sockaddr(proxi->url, &cs->url, &cs->port)) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							LOGWARNING("Failed to extract address from %s", proxi->url); | 
					 | 
					 | 
					 | 
							LOGWARNING("Failed to extract address from %s", proxi->url); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							goto out; | 
					 | 
					 | 
					 | 
							goto out; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1822,8 +1827,6 @@ static bool proxy_alive(ckpool_t *ckp, proxy_instance_t *proxi, connsock_t *cs, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						} | 
					 | 
					 | 
					 | 
						} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						proxi->authorised = ret = true; | 
					 | 
					 | 
					 | 
						proxi->authorised = ret = true; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					out: | 
					 | 
					 | 
					 | 
					out: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						cksem_post(&cs->sem); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (!ret) { | 
					 | 
					 | 
					 | 
						if (!ret) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							send_stratifier_deadproxy(ckp, proxi->id, proxi->subid); | 
					 | 
					 | 
					 | 
							send_stratifier_deadproxy(ckp, proxi->id, proxi->subid); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							/* Close and invalidate the file handle */ | 
					 | 
					 | 
					 | 
							/* Close and invalidate the file handle */ | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -1831,6 +1834,8 @@ out: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								Close(cs->fd); | 
					 | 
					 | 
					 | 
								Close(cs->fd); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						} | 
					 | 
					 | 
					 | 
						} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						proxi->alive = ret; | 
					 | 
					 | 
					 | 
						proxi->alive = ret; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						cksem_post(&cs->sem); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						return ret; | 
					 | 
					 | 
					 | 
						return ret; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -2072,6 +2077,8 @@ static void *proxy_recv(void *arg) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							if (likely(ret > 0)) { | 
					 | 
					 | 
					 | 
							if (likely(ret > 0)) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								subproxy = event.data.ptr; | 
					 | 
					 | 
					 | 
								subproxy = event.data.ptr; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								cs = &subproxy->cs; | 
					 | 
					 | 
					 | 
								cs = &subproxy->cs; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								if (!subproxy->alive) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
									continue; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								/* Serialise messages from here once we have a cs by
 | 
					 | 
					 | 
					 | 
								/* Serialise messages from here once we have a cs by
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								 * holding the semaphore. */ | 
					 | 
					 | 
					 | 
								 * holding the semaphore. */ | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -2185,6 +2192,9 @@ static void *userproxy_recv(void *arg) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							timeout = 0; | 
					 | 
					 | 
					 | 
							timeout = 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							cs = &proxy->cs; | 
					 | 
					 | 
					 | 
							cs = &proxy->cs; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							if (!proxy->alive) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								continue; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							cksem_wait(&cs->sem); | 
					 | 
					 | 
					 | 
							cksem_wait(&cs->sem); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							while ((ret = read_socket_line(cs, &timeout)) > 0) { | 
					 | 
					 | 
					 | 
							while ((ret = read_socket_line(cs, &timeout)) > 0) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								/* proxy may have been recycled here if it is not a
 | 
					 | 
					 | 
					 | 
								/* proxy may have been recycled here if it is not a
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -2332,6 +2342,8 @@ static proxy_instance_t *__add_userproxy(ckpool_t *ckp, gdata_t *gdata, const in | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						proxy->auth = auth; | 
					 | 
					 | 
					 | 
						proxy->auth = auth; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						proxy->pass = pass; | 
					 | 
					 | 
					 | 
						proxy->pass = pass; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						proxy->ckp = proxy->cs.ckp = ckp; | 
					 | 
					 | 
					 | 
						proxy->ckp = proxy->cs.ckp = ckp; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						cksem_init(&proxy->cs.sem); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						cksem_post(&proxy->cs.sem); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						HASH_ADD_INT(gdata->proxies, id, proxy); | 
					 | 
					 | 
					 | 
						HASH_ADD_INT(gdata->proxies, id, proxy); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						return proxy; | 
					 | 
					 | 
					 | 
						return proxy; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |