All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Gix, Brian" <brian.gix@intel.com>
To: "linux-bluetooth@vger.kernel.org"
	<linux-bluetooth@vger.kernel.org>,
	"Stotland, Inga" <inga.stotland@intel.com>
Subject: Re: [PATCH BlueZ 2/2] mesh: Clean up when finishing the Join call
Date: Mon, 14 Jan 2019 22:10:26 +0000	[thread overview]
Message-ID: <1547503824.32139.1.camel@intel.com> (raw)
In-Reply-To: <20190112024055.9967-2-inga.stotland@intel.com>


Patch Applied

On Fri, 2019-01-11 at 18:40 -0800, Inga Stotland wrote:
> Consolidate multiple instances where the pending Join data is freed
> into calling one function free_pending_join_call().
> 
> Also, add checks for NULL data in cleanup functions for storage, agent
> and provisioning acceptor.
> ---
>  mesh/agent.c         |  2 +-
>  mesh/mesh.c          | 59 +++++++++++++++++++-------------------------
>  mesh/prov-acceptor.c |  5 ++--
>  mesh/storage.c       |  3 +++
>  4 files changed, 32 insertions(+), 37 deletions(-)
> 
> diff --git a/mesh/agent.c b/mesh/agent.c
> index c6ff11802..88ad84d79 100644
> --- a/mesh/agent.c
> +++ b/mesh/agent.c
> @@ -210,7 +210,7 @@ static void agent_free(void *agent_data)
>  
>  void mesh_agent_remove(struct mesh_agent *agent)
>  {
> -	if (!l_queue_find(agents, simple_match, agent))
> +	if (!agent || !l_queue_find(agents, simple_match, agent))
>  		return;
>  
>  	agent_free(agent);
> diff --git a/mesh/mesh.c b/mesh/mesh.c
> index 8971f7cc4..a1c26e77c 100644
> --- a/mesh/mesh.c
> +++ b/mesh/mesh.c
> @@ -345,6 +345,28 @@ static void attach_exit(void *data)
>  	l_free(pending);
>  }
>  
> +static void free_pending_join_call(bool failed)
> +{
> +	if (!join_pending)
> +		return;
> +
> +	if (join_pending->disc_watch)
> +		l_dbus_remove_watch(dbus_get_bus(),
> +						join_pending->disc_watch);
> +
> +	acceptor_cancel(&mesh);
> +
> +	mesh_agent_remove(join_pending->agent);
> +
> +	if (failed) {
> +		storage_remove_node_config(join_pending->node);
> +		node_free(join_pending->node);
> +	}
> +
> +	l_free(join_pending);
> +	join_pending = NULL;
> +}
> +
>  void mesh_cleanup(void)
>  {
>  	struct l_dbus_message *reply;
> @@ -353,19 +375,12 @@ void mesh_cleanup(void)
>  	mgmt_unref(mgmt_mesh);
>  
>  	if (join_pending) {
> +		/* The Join() call failed since it has not been completed */
>  		reply = dbus_error(join_pending->msg, MESH_ERROR_FAILED,
>  							"Failed. Exiting");
>  		l_dbus_send(dbus_get_bus(), reply);
>  
> -		if (join_pending->disc_watch)
> -			l_dbus_remove_watch(dbus_get_bus(),
> -						join_pending->disc_watch);
> -
> -		if (join_pending->node)
> -			node_free(join_pending->node);
> -
> -		l_free(join_pending);
> -		join_pending = NULL;
> +		free_pending_join_call(true);
>  	}
>  
>  	l_queue_destroy(attach_queue, attach_exit);
> @@ -404,26 +419,6 @@ const char *mesh_status_str(uint8_t err)
>  	}
>  }
>  
> -static void free_pending_join_call(bool failed)
> -{
> -	if (!join_pending)
> -		return;
> -
> -	if (join_pending->disc_watch)
> -		l_dbus_remove_watch(dbus_get_bus(),
> -						join_pending->disc_watch);
> -
> -	mesh_agent_remove(join_pending->agent);
> -
> -	if (failed) {
> -		storage_remove_node_config(join_pending->node);
> -		mesh_agent_remove(join_pending->agent);
> -	}
> -
> -	l_free(join_pending);
> -	join_pending = NULL;
> -}
> -
>  /* This is being called if the app exits unexpectedly */
>  static void prov_disc_cb(struct l_dbus *bus, void *user_data)
>  {
> @@ -433,8 +428,6 @@ static void prov_disc_cb(struct l_dbus *bus, void *user_data)
>  	if (join_pending->msg)
>  		l_dbus_message_unref(join_pending->msg);
>  
> -	acceptor_cancel(&mesh);
> -
>  	join_pending->disc_watch = 0;
>  
>  	free_pending_join_call(true);
> @@ -553,9 +546,7 @@ static void node_init_cb(struct mesh_node *node, struct mesh_agent *agent)
>  
>  fail:
>  	l_dbus_send(dbus_get_bus(), reply);
> -	mesh_agent_remove(join_pending->agent);
> -	l_free(join_pending);
> -	join_pending = NULL;
> +	free_pending_join_call(true);
>  }
>  
>  static struct l_dbus_message *join_network_call(struct l_dbus *dbus,
> diff --git a/mesh/prov-acceptor.c b/mesh/prov-acceptor.c
> index baa3c4d30..d983991d4 100644
> --- a/mesh/prov-acceptor.c
> +++ b/mesh/prov-acceptor.c
> @@ -118,9 +118,10 @@ static struct mesh_prov_acceptor *prov = NULL;
>  
>  static void acceptor_free(void)
>  {
> +	if (!prov)
> +		return;
>  
> -	if (prov)
> -		l_timeout_remove(prov->timeout);
> +	l_timeout_remove(prov->timeout);
>  
>  	mesh_send_cancel(bec_filter, sizeof(bec_filter));
>  	mesh_send_cancel(&pkt_filter, sizeof(pkt_filter));
> diff --git a/mesh/storage.c b/mesh/storage.c
> index 57ae88b34..3a6614eb2 100644
> --- a/mesh/storage.c
> +++ b/mesh/storage.c
> @@ -573,6 +573,9 @@ void storage_remove_node_config(struct mesh_node *node)
>  	struct json_object *jnode;
>  	const char *dir_name;
>  
> +	if (!node)
> +		return;
> +
>  	jnode = node_jconfig_get(node);
>  	if (jnode)
>  		json_object_put(jnode);

  reply	other threads:[~2019-01-14 22:10 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-12  2:40 [PATCH BlueZ 1/2] mesh: Fix reading device UUID from Join() call Inga Stotland
2019-01-12  2:40 ` [PATCH BlueZ 2/2] mesh: Clean up when finishing the Join call Inga Stotland
2019-01-14 22:10   ` Gix, Brian [this message]
2019-01-14 22:10 ` [PATCH BlueZ 1/2] mesh: Fix reading device UUID from Join() call Gix, Brian

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1547503824.32139.1.camel@intel.com \
    --to=brian.gix@intel.com \
    --cc=inga.stotland@intel.com \
    --cc=linux-bluetooth@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.