P2PS: Add a function to free a PD context
authorMax Stepanov <Max.Stepanov@intel.com>
Wed, 10 Jun 2015 08:43:40 +0000 (11:43 +0300)
committerJouni Malinen <j@w1.fi>
Sun, 14 Jun 2015 20:16:55 +0000 (23:16 +0300)
Free a PD context with a function encapsulating both os_free() call and
setting a PD context pointer to NULL.

Signed-off-by: Max Stepanov <Max.Stepanov@intel.com>
Reviewed-by: Ilan Peer <ilan.peer@intel.com>
src/p2p/p2p.c
src/p2p/p2p_i.h
src/p2p/p2p_pd.c

index 7a05c66..cf16237 100644 (file)
@@ -2970,7 +2970,7 @@ void p2p_deinit(struct p2p_data *p2p)
        os_free(p2p->cfg->serial_number);
        os_free(p2p->cfg->pref_chan);
        os_free(p2p->groups);
-       os_free(p2p->p2ps_prov);
+       p2ps_prov_free(p2p);
        wpabuf_free(p2p->sd_resp);
        os_free(p2p->after_scan_tx);
        p2p_remove_wps_vendor_extensions(p2p);
index 853121c..68882ea 100644 (file)
@@ -803,6 +803,7 @@ void p2p_process_prov_disc_resp(struct p2p_data *p2p, const u8 *sa,
 int p2p_send_prov_disc_req(struct p2p_data *p2p, struct p2p_device *dev,
                           int join, int force_freq);
 void p2p_reset_pending_pd(struct p2p_data *p2p);
+void p2ps_prov_free(struct p2p_data *p2p);
 
 /* p2p_invitation.c */
 void p2p_process_invitation_req(struct p2p_data *p2p, const u8 *sa,
index bc84269..86558f7 100644 (file)
@@ -881,8 +881,7 @@ void p2p_process_prov_disc_resp(struct p2p_data *p2p, const u8 *sa,
                                                 P2P_PROV_DISC_REJECTED,
                                                 adv_id, adv_mac, NULL);
                p2p_parse_free(&msg);
-               os_free(p2p->p2ps_prov);
-               p2p->p2ps_prov = NULL;
+               p2ps_prov_free(p2p);
                goto out;
        }
 
@@ -920,8 +919,7 @@ void p2p_process_prov_disc_resp(struct p2p_data *p2p, const u8 *sa,
                                conncap, passwd_id, msg.persistent_ssid,
                                msg.persistent_ssid_len, 1, 0, NULL);
                }
-               os_free(p2p->p2ps_prov);
-               p2p->p2ps_prov = NULL;
+               p2ps_prov_free(p2p);
        }
 
        if (status != P2P_SC_SUCCESS &&
@@ -933,8 +931,7 @@ void p2p_process_prov_disc_resp(struct p2p_data *p2p, const u8 *sa,
                                p2p->p2ps_prov->session_mac,
                                group_mac, adv_id, p2p->p2ps_prov->session_id,
                                0, 0, NULL, 0, 1, 0, NULL);
-               os_free(p2p->p2ps_prov);
-               p2p->p2ps_prov = NULL;
+               p2ps_prov_free(p2p);
        }
 
        if (status == P2P_SC_FAIL_INFO_CURRENTLY_UNAVAILABLE) {
@@ -950,8 +947,7 @@ void p2p_process_prov_disc_resp(struct p2p_data *p2p, const u8 *sa,
 
                        if (!deferred_sess_resp) {
                                p2p_parse_free(&msg);
-                               os_free(p2p->p2ps_prov);
-                               p2p->p2ps_prov = NULL;
+                               p2ps_prov_free(p2p);
                                goto out;
                        }
                        utf8_escape((char *) msg.session_info, info_len,
@@ -978,8 +974,7 @@ void p2p_process_prov_disc_resp(struct p2p_data *p2p, const u8 *sa,
                                                 P2P_PROV_DISC_REJECTED, 0,
                                                 NULL, NULL);
                p2p_parse_free(&msg);
-               os_free(p2p->p2ps_prov);
-               p2p->p2ps_prov = NULL;
+               p2ps_prov_free(p2p);
                goto out;
        }
 
@@ -1120,7 +1115,7 @@ int p2p_prov_disc_req(struct p2p_data *p2p, const u8 *peer_addr,
 
        /* Reset provisioning info */
        dev->wps_prov_info = 0;
-       os_free(p2p->p2ps_prov);
+       p2ps_prov_free(p2p);
        p2p->p2ps_prov = p2ps_prov;
 
        dev->req_config_methods = config_methods;
@@ -1176,3 +1171,10 @@ void p2p_reset_pending_pd(struct p2p_data *p2p)
        p2p->pd_retries = 0;
        p2p->pd_force_freq = 0;
 }
+
+
+void p2ps_prov_free(struct p2p_data *p2p)
+{
+       os_free(p2p->p2ps_prov);
+       p2p->p2ps_prov = NULL;
+}