forked from cory/tildefriends
		
	ssb: Even more muxrpc activity status fixes.
This commit is contained in:
		
							
								
								
									
										51
									
								
								src/ssb.c
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								src/ssb.c
									
									
									
									
									
								
							| @@ -662,28 +662,6 @@ static int _request_compare(const void* a, const void* b) | |||||||
| 	return ai < br->request_number ? -1 : br->request_number < ai ? 1 : 0; | 	return ai < br->request_number ? -1 : br->request_number < ai ? 1 : 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| static bool _tf_ssb_connection_get_request_callback(tf_ssb_connection_t* connection, int32_t request_number, tf_ssb_rpc_callback_t** out_callback, void** out_user_data) |  | ||||||
| { |  | ||||||
| 	if (!connection->requests) |  | ||||||
| 	{ |  | ||||||
| 		return false; |  | ||||||
| 	} |  | ||||||
| 	tf_ssb_request_t* request = bsearch(&request_number, connection->requests, connection->requests_count, sizeof(tf_ssb_request_t), _request_compare); |  | ||||||
| 	if (request) |  | ||||||
| 	{ |  | ||||||
| 		if (out_callback) |  | ||||||
| 		{ |  | ||||||
| 			*out_callback = request->callback; |  | ||||||
| 		} |  | ||||||
| 		if (out_user_data) |  | ||||||
| 		{ |  | ||||||
| 			*out_user_data = request->user_data; |  | ||||||
| 		} |  | ||||||
| 		return true; |  | ||||||
| 	} |  | ||||||
| 	return false; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void _tf_ssb_request_activity_timer(uv_timer_t* timer) | static void _tf_ssb_request_activity_timer(uv_timer_t* timer) | ||||||
| { | { | ||||||
| 	tf_ssb_t* ssb = timer->data; | 	tf_ssb_t* ssb = timer->data; | ||||||
| @@ -712,12 +690,39 @@ static void _tf_ssb_request_activity_timer(uv_timer_t* timer) | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (any_still_active) | 	if (any_still_active && uv_timer_get_due_in(&ssb->request_activity_timer) == 0) | ||||||
| 	{ | 	{ | ||||||
| 		uv_timer_start(&ssb->request_activity_timer, _tf_ssb_request_activity_timer, k_rpc_active_ms, 0); | 		uv_timer_start(&ssb->request_activity_timer, _tf_ssb_request_activity_timer, k_rpc_active_ms, 0); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static bool _tf_ssb_connection_get_request_callback(tf_ssb_connection_t* connection, int32_t request_number, tf_ssb_rpc_callback_t** out_callback, void** out_user_data) | ||||||
|  | { | ||||||
|  | 	if (!connection->requests) | ||||||
|  | 	{ | ||||||
|  | 		return false; | ||||||
|  | 	} | ||||||
|  | 	tf_ssb_request_t* request = bsearch(&request_number, connection->requests, connection->requests_count, sizeof(tf_ssb_request_t), _request_compare); | ||||||
|  | 	if (request) | ||||||
|  | 	{ | ||||||
|  | 		if (out_callback) | ||||||
|  | 		{ | ||||||
|  | 			*out_callback = request->callback; | ||||||
|  | 		} | ||||||
|  | 		if (out_user_data) | ||||||
|  | 		{ | ||||||
|  | 			*out_user_data = request->user_data; | ||||||
|  | 		} | ||||||
|  | 		request->last_active = uv_now(connection->ssb->loop); | ||||||
|  | 		if (uv_timer_get_due_in(&connection->ssb->request_activity_timer) == 0) | ||||||
|  | 		{ | ||||||
|  | 			uv_timer_start(&connection->ssb->request_activity_timer, _tf_ssb_request_activity_timer, k_rpc_active_ms, 0); | ||||||
|  | 		} | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  |  | ||||||
| void tf_ssb_connection_add_request(tf_ssb_connection_t* connection, int32_t request_number, const char* name, tf_ssb_rpc_callback_t* callback, tf_ssb_callback_cleanup_t* cleanup, | void tf_ssb_connection_add_request(tf_ssb_connection_t* connection, int32_t request_number, const char* name, tf_ssb_rpc_callback_t* callback, tf_ssb_callback_cleanup_t* cleanup, | ||||||
| 	void* user_data, tf_ssb_connection_t* dependent_connection) | 	void* user_data, tf_ssb_connection_t* dependent_connection) | ||||||
| { | { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user