Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 15b22fe0 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "qseecom: fix listener_access_lock and unregister issues"

parents d797093c 1443f8fc
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -331,6 +331,7 @@ struct qseecom_client_handle {
struct qseecom_listener_handle {
struct qseecom_listener_handle {
	u32               id;
	u32               id;
	bool              unregister_pending;
	bool              unregister_pending;
	bool              release_called;
};
};


static struct qseecom_control qseecom;
static struct qseecom_control qseecom;
@@ -1464,6 +1465,9 @@ static void __qseecom_processing_pending_lsnr_unregister(void)
		if (entry && entry->data) {
		if (entry && entry->data) {
			pr_debug("process pending unregister %d\n",
			pr_debug("process pending unregister %d\n",
					entry->data->listener.id);
					entry->data->listener.id);
			/* don't process if qseecom_release is not called*/
			if (!entry->data->listener.release_called)
				break;
			ptr_svc = __qseecom_find_svc(
			ptr_svc = __qseecom_find_svc(
						entry->data->listener.id);
						entry->data->listener.id);
			if (ptr_svc) {
			if (ptr_svc) {
@@ -2318,8 +2322,10 @@ static int __qseecom_reentrancy_process_incomplete_cmd(
				ret = -EINVAL;
				ret = -EINVAL;
				goto exit;
				goto exit;
			}
			}
			mutex_unlock(&listener_access_lock);
			ret = __qseecom_process_reentrancy_blocked_on_listener(
			ret = __qseecom_process_reentrancy_blocked_on_listener(
					resp, NULL, data);
					resp, NULL, data);
			mutex_lock(&listener_access_lock);
			if (ret) {
			if (ret) {
				pr_err("failed to process App(%d) %s blocked on listener %d\n",
				pr_err("failed to process App(%d) %s blocked on listener %d\n",
					data->client.app_id,
					data->client.app_id,
@@ -7820,6 +7826,7 @@ static int qseecom_release(struct inode *inode, struct file *file)
			free_private_data = false;
			free_private_data = false;
			mutex_lock(&listener_access_lock);
			mutex_lock(&listener_access_lock);
			ret = qseecom_unregister_listener(data);
			ret = qseecom_unregister_listener(data);
			data->listener.release_called = true;
			mutex_unlock(&listener_access_lock);
			mutex_unlock(&listener_access_lock);
			break;
			break;
		case QSEECOM_CLIENT_APP:
		case QSEECOM_CLIENT_APP: