forked from cory/tildefriends
		
	I think that's all the leaks accounted for though not yet fixed.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4799 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
		| @@ -67,11 +67,8 @@ function socket(request, response, client) { | ||||
| 		if (process && process.task) { | ||||
| 			process.task.kill(); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	response.onError = async function(error) { | ||||
| 		if (process && process.task) { | ||||
| 			process.task.kill(); | ||||
| 		if (process) { | ||||
| 			process.timeout = 0; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -157,7 +154,7 @@ function socket(request, response, client) { | ||||
| 						process.lastPing = now; | ||||
| 					} | ||||
|  | ||||
| 					if (again) { | ||||
| 					if (again && process.timeout) { | ||||
| 						setTimeout(ping, process.timeout); | ||||
| 					} | ||||
| 				} | ||||
|   | ||||
| @@ -983,7 +983,7 @@ loadSettings().then(function() { | ||||
| 	} | ||||
| 	httpd.all("/login", auth.handler); | ||||
| 	httpd.all("/app/socket", app.socket); | ||||
| 	httpd.all("", function(request, response) { | ||||
| 	httpd.all("", function default_http_handler(request, response) { | ||||
| 		let match; | ||||
| 		if (request.uri === "/" || request.uri === "") { | ||||
| 			try { | ||||
|   | ||||
| @@ -378,7 +378,7 @@ static void _http_add_body_bytes(tf_http_connection_t* connection, const void* d | ||||
| 			tf_trace_begin(connection->http->trace, connection->trace_name ? connection->trace_name : "http"); | ||||
| 			connection->callback(request); | ||||
| 			tf_trace_end(connection->http->trace); | ||||
| 			tf_http_request_release(request); | ||||
| 			tf_http_request_unref(request); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -695,6 +695,10 @@ void tf_http_destroy(tf_http_t* http) | ||||
| 	tf_free(http->handlers); | ||||
| 	http->handlers_count = 0; | ||||
|  | ||||
| 	for (int i = 0; i < http->connections_count; i++) | ||||
| 	{ | ||||
| 		_http_connection_destroy(http->connections[i], "tf_http_destroy"); | ||||
| 	} | ||||
| 	tf_free(http->connections); | ||||
| 	http->connections_count = 0; | ||||
|  | ||||
| @@ -894,7 +898,7 @@ void tf_http_request_ref(tf_http_request_t* request) | ||||
| 	request->connection->ref_count++; | ||||
| } | ||||
|  | ||||
| void tf_http_request_release(tf_http_request_t* request) | ||||
| void tf_http_request_unref(tf_http_request_t* request) | ||||
| { | ||||
| 	if (--request->connection->ref_count == 0) | ||||
| 	{ | ||||
| @@ -903,6 +907,7 @@ void tf_http_request_release(tf_http_request_t* request) | ||||
| 			_http_reset_connection(request->connection); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if (--request->ref_count == 0) | ||||
| 	{ | ||||
| 		request->connection->request = NULL; | ||||
|   | ||||
| @@ -47,7 +47,7 @@ void tf_http_set_user_data(tf_http_t* http, void* user_data, tf_http_cleanup_t* | ||||
| void* tf_http_get_user_data(tf_http_t* http); | ||||
|  | ||||
| void tf_http_request_ref(tf_http_request_t* request); | ||||
| void tf_http_request_release(tf_http_request_t* request); | ||||
| void tf_http_request_unref(tf_http_request_t* request); | ||||
| const char* tf_http_request_get_header(tf_http_request_t* request, const char* name); | ||||
| void tf_http_request_send(tf_http_request_t* request, const void* data, size_t size); | ||||
| void tf_http_request_websocket_upgrade(tf_http_request_t* request); | ||||
|   | ||||
| @@ -163,7 +163,7 @@ static JSValue _httpd_response_send(JSContext* context, JSValueConst this_val, i | ||||
| 	return JS_UNDEFINED; | ||||
| } | ||||
|  | ||||
| static void _httpd_close_callback(tf_http_request_t* request) | ||||
| static void _httpd_websocket_close_callback(tf_http_request_t* request) | ||||
| { | ||||
| 	JSContext* context = request->context; | ||||
| 	JSValue response_object = JS_MKPTR(JS_TAG_OBJECT, request->user_data); | ||||
| @@ -172,7 +172,9 @@ static void _httpd_close_callback(tf_http_request_t* request) | ||||
| 	tf_util_report_error(context, response); | ||||
| 	JS_FreeValue(context, response); | ||||
| 	JS_FreeValue(context, on_close); | ||||
| 	tf_http_request_release(request); | ||||
| 	JS_SetPropertyStr(context, response_object, "onMessage", JS_UNDEFINED); | ||||
| 	JS_SetPropertyStr(context, response_object, "onClose", JS_UNDEFINED); | ||||
| 	JS_FreeValue(context, response_object); | ||||
| } | ||||
|  | ||||
| static void _httpd_message_callback(tf_http_request_t* request, int op_code, const void* data, size_t size) | ||||
| @@ -217,6 +219,7 @@ static void _httpd_callback_internal(tf_http_request_t* request, bool is_websock | ||||
| 	JS_SetPropertyStr(context, request_object, "client", client); | ||||
|  | ||||
| 	JSValue response_object = JS_NewObjectClass(context, _httpd_request_class_id); | ||||
| 	/* The ref is owned by the JS object and will be released by the finalizer. */ | ||||
| 	tf_http_request_ref(request); | ||||
| 	JS_SetOpaque(response_object, request); | ||||
| 	JS_SetPropertyStr(context, response_object, "writeHead", JS_NewCFunction(context, _httpd_response_write_head, "writeHead", 2)); | ||||
| @@ -318,15 +321,15 @@ static JSValue _httpd_websocket_upgrade(JSContext* context, JSValueConst this_va | ||||
| 		tf_http_respond(request, 101, headers, headers_count, NULL, 0); | ||||
|  | ||||
| 		request->on_message = _httpd_message_callback; | ||||
| 		request->on_close = _httpd_close_callback; | ||||
| 		request->on_close = _httpd_websocket_close_callback; | ||||
| 		request->context = context; | ||||
| 		request->user_data = JS_VALUE_GET_PTR(JS_DupValue(context, this_val)); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		tf_http_respond(request, 400, NULL, 0, NULL, 0); | ||||
| 		tf_http_request_release(request); | ||||
| 	} | ||||
| 	tf_http_request_unref(request); | ||||
|  | ||||
| 	return JS_UNDEFINED; | ||||
| } | ||||
| @@ -385,7 +388,7 @@ static void _httpd_finalizer(JSRuntime* runtime, JSValue value) | ||||
| static void _httpd_request_finalizer(JSRuntime* runtime, JSValue value) | ||||
| { | ||||
| 	tf_http_request_t* request = JS_GetOpaque(value, _httpd_request_class_id); | ||||
| 	tf_http_request_release(request); | ||||
| 	tf_http_request_unref(request); | ||||
| } | ||||
|  | ||||
| static void _httpd_endpoint_trace(tf_http_request_t* request) | ||||
|   | ||||
| @@ -1623,7 +1623,7 @@ tf_task_t* tf_task_create() | ||||
| 	uv_unref((uv_handle_t*)&task->trace_timer); | ||||
| 	task->gc_timer.data = task; | ||||
| 	uv_timer_init(&task->_loop, &task->gc_timer); | ||||
| 	uv_timer_start(&task->gc_timer, _tf_task_gc_timer, 10000, 10000); | ||||
| 	uv_timer_start(&task->gc_timer, _tf_task_gc_timer, 1000, 1000); | ||||
| 	uv_unref((uv_handle_t*)&task->gc_timer); | ||||
| 	task->idle.data = task; | ||||
| 	uv_idle_init(&task->_loop, &task->idle); | ||||
|   | ||||
| @@ -292,6 +292,7 @@ static JSValue _util_setTimeout(JSContext* context, JSValueConst this_val, int a | ||||
| 	JS_ToInt64(context, &duration, argv[1]); | ||||
| 	if (uv_timer_start(&timeout->_timer, _util_timeoutCallback, duration, 0) != 0) | ||||
| 	{ | ||||
| 		JS_FreeValue(context, timeout->_callback); | ||||
| 		tf_free(timeout); | ||||
| 	} | ||||
| 	return JS_NULL; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user