mirror of
				https://github.com/coturn/coturn.git
				synced 2025-10-31 15:00:59 +01:00 
			
		
		
		
	more fixes for issue 123
This commit is contained in:
		
							parent
							
								
									f088108139
								
							
						
					
					
						commit
						114257e872
					
				| @ -2530,8 +2530,10 @@ static void socket_input_handler(evutil_socket_t fd, short what, void* arg) | |||||||
| 
 | 
 | ||||||
| 	ioa_socket_handle s = (ioa_socket_handle)arg; | 	ioa_socket_handle s = (ioa_socket_handle)arg; | ||||||
| 
 | 
 | ||||||
| 	if(!s) | 	if(!s) { | ||||||
|  | 		read_spare_buffer(fd); | ||||||
| 		return; | 		return; | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	if((s->magic != SOCKET_MAGIC)||(s->done)) { | 	if((s->magic != SOCKET_MAGIC)||(s->done)) { | ||||||
| 		read_spare_buffer(fd); | 		read_spare_buffer(fd); | ||||||
| @ -2547,6 +2549,8 @@ static void socket_input_handler(evutil_socket_t fd, short what, void* arg) | |||||||
| 
 | 
 | ||||||
| 	if (!ioa_socket_tobeclosed(s)) | 	if (!ioa_socket_tobeclosed(s)) | ||||||
| 		socket_input_worker(s); | 		socket_input_worker(s); | ||||||
|  | 	else | ||||||
|  | 		read_spare_buffer(fd); | ||||||
| 
 | 
 | ||||||
| 	if((s->magic != SOCKET_MAGIC)||(s->done)) { | 	if((s->magic != SOCKET_MAGIC)||(s->done)) { | ||||||
| 		TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "!!!%s (1) on socket, ev=%d: 0x%lx, st=%d, sat=%d\n", __FUNCTION__,(int)what,(long)s, s->st, s->sat); | 		TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "!!!%s (1) on socket, ev=%d: 0x%lx, st=%d, sat=%d\n", __FUNCTION__,(int)what,(long)s, s->st, s->sat); | ||||||
| @ -2645,30 +2649,50 @@ static void socket_output_handler_bev(struct bufferevent *bev, void* arg) | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static int read_spare_buffer_bev(struct bufferevent *bev) | ||||||
|  | { | ||||||
|  | 	if(bev) { | ||||||
|  | 		char some_buffer[8192]; | ||||||
|  | 		bufferevent_read(bev, some_buffer, sizeof(some_buffer)); | ||||||
|  | 	} | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static void socket_input_handler_bev(struct bufferevent *bev, void* arg) | static void socket_input_handler_bev(struct bufferevent *bev, void* arg) | ||||||
| { | { | ||||||
| 
 | 
 | ||||||
| 	if (bev && arg) { | 	if (bev) { | ||||||
|  | 
 | ||||||
|  | 		if(!arg) { | ||||||
|  | 			read_spare_buffer_bev(bev); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
| 		ioa_socket_handle s = (ioa_socket_handle) arg; | 		ioa_socket_handle s = (ioa_socket_handle) arg; | ||||||
| 
 | 
 | ||||||
| 		if(bev != s->bev) { | 		if(bev != s->bev) { | ||||||
| 			TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "!!! %s socket: 0x%lx: wrong bev\n", __FUNCTION__,(long)s); | 			TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "!!! %s socket: 0x%lx: wrong bev\n", __FUNCTION__,(long)s); | ||||||
|  | 			read_spare_buffer_bev(bev); | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if((s->magic != SOCKET_MAGIC)||(s->done)) { | 		if((s->magic != SOCKET_MAGIC)||(s->done)) { | ||||||
| 			TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "!!!%s on socket: 0x%lx, st=%d, sat=%d\n", __FUNCTION__, (long) s, s->st, s->sat); | 			TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "!!!%s on socket: 0x%lx, st=%d, sat=%d\n", __FUNCTION__, (long) s, s->st, s->sat); | ||||||
| 			TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "!!! %s socket: 0x%lx was closed\n", __FUNCTION__,(long)s); | 			TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "!!! %s socket: 0x%lx was closed\n", __FUNCTION__,(long)s); | ||||||
|  | 			read_spare_buffer_bev(bev); | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		{ | 		{ | ||||||
| 			size_t cycle = 0; | 			size_t cycle = 0; | ||||||
| 			while (!ioa_socket_tobeclosed(s) && (cycle++<64)) { | 			do { | ||||||
| 				if (socket_input_worker(s) <= 0) | 				if(ioa_socket_tobeclosed(s)) { | ||||||
|  | 					read_spare_buffer_bev(bev); | ||||||
| 					break; | 					break; | ||||||
| 				} | 				} | ||||||
|  | 				if (socket_input_worker(s) <= 0) | ||||||
|  | 					break; | ||||||
|  | 			} while(cycle++<128); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if((s->magic != SOCKET_MAGIC)||(s->done)) { | 		if((s->magic != SOCKET_MAGIC)||(s->done)) { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user