<div dir="ltr"><div><div>All right.<br></div>Gonna test your suggestion and check if regression is ok. Should I send this patch again or are you gonna do that?<br><br></div>Regards.<br></div><div class="gmail_extra"><br><br>
<div class="gmail_quote">On Wed, Mar 19, 2014 at 8:38 AM, Otcheretianski, Andrei <span dir="ltr">&lt;<a href="mailto:andrei.otcheretianski@intel.com" target="_blank">andrei.otcheretianski@intel.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The only place where wpa_s-&gt;radio is set to NULL is in radio_remove_interface.. Since radio_remove_works should remove all the works (including started) and it is called right before setting wpa_s-&gt;radio = NULL, I can&#39;t see any scenario where work-&gt;wpa_s-&gt;radio == NULL<br>

<br>
&gt; From: Eduardo Abinader [mailto:<a href="mailto:eduardo.abinader@openbossa.org">eduardo.abinader@openbossa.org</a>]<br>
&gt; Sent: Wednesday, March 19, 2014 13:25<br>
&gt; To: Otcheretianski, Andrei<br>
&gt; Subject: Re: [PATCH 1/2] Fix radio remove works<br>
<div class="HOEnZb"><div class="h5">&gt;<br>
&gt; Actually, I did cogitate a very similar solution, but I was wondering if there was some deferred radio work still being removed or cleaned, so that&#39;s why I decided to implement in radio_remove_works.<br>
&gt;<br>
&gt; The work-&gt;wpa_s is just a sanity check for work-&gt;wpa_s-&gt;radio, actually. Just to be safer.<br>
&gt;<br>
&gt;<br>
&gt; Regards.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Wed, Mar 19, 2014 at 4:21 AM, Otcheretianski, Andrei &lt;<a href="mailto:andrei.otcheretianski@intel.com">andrei.otcheretianski@intel.com</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt; Hi,<br>
&gt; Checking work-&gt;wpa_s doesn&#39;t make sense, since it is set in radio_add_work and never unset.<br>
&gt; Anyway I think the fix should be more like this:<br>
&gt;<br>
&gt; @@ -3259,6 +3259,7 @@ static void radio_remove_interface(struct wpa_supplicant *wpa_s)<br>
&gt;                                  wpa_s-&gt;ifname, radio-&gt;name);<br>
&gt;               dl_list_del(&amp;wpa_s-&gt;radio_list);<br>
&gt;               if (!dl_list_empty(&amp;radio-&gt;ifaces)) {<br>
&gt; +               radio_remove_works(wpa_s, NULL, 0);<br>
&gt;                               wpa_s-&gt;radio = NULL;<br>
&gt;                               return; /* Interfaces remain for this radio */<br>
&gt;               }<br>
&gt;<br>
&gt; Regards,<br>
&gt; Andrei<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; &gt; -----Original Message-----<br>
&gt; &gt; From: <a href="mailto:hostap-bounces@lists.shmoo.com">hostap-bounces@lists.shmoo.com</a> [mailto:<a href="mailto:hostap-">hostap-</a><br>
&gt; &gt; <a href="mailto:bounces@lists.shmoo.com">bounces@lists.shmoo.com</a>] On Behalf Of Eduardo Abinader<br>
&gt; &gt; Sent: Tuesday, March 18, 2014 15:51<br>
&gt; &gt; To: <a href="mailto:hostap@lists.shmoo.com">hostap@lists.shmoo.com</a><br>
&gt; &gt; Subject: [PATCH 1/2] Fix radio remove works<br>
&gt; &gt;<br>
&gt; &gt; When radio has been previously removed and pending radio works related<br>
&gt; &gt; to an excluded interface remains, new works are not capable of being<br>
&gt; &gt; executed. That occurs when a potential P2P client fails to negotiate group<br>
&gt; &gt; formation. For some reason, the P2P device is no more capable of issuing<br>
&gt; &gt; radio works. Those checks prevent this situation, by allowing removal of<br>
&gt; &gt; previous radio works.<br>
&gt; &gt;<br>
&gt; &gt; Signed-off-by: Eduardo Abinader &lt;<a href="mailto:eduardo.abinader@openbossa.org">eduardo.abinader@openbossa.org</a>&gt;<br>
&gt; &gt; ---<br>
&gt; &gt;  wpa_supplicant/wpa_supplicant.c | 3 ++-<br>
&gt; &gt;  1 file changed, 2 insertions(+), 1 deletion(-)<br>
&gt; &gt;<br>
&gt; &gt; diff --git a/wpa_supplicant/wpa_supplicant.c<br>
&gt; &gt; b/wpa_supplicant/wpa_supplicant.c index 499dcb3..c74ac20 100644<br>
&gt; &gt; --- a/wpa_supplicant/wpa_supplicant.c<br>
&gt; &gt; +++ b/wpa_supplicant/wpa_supplicant.c<br>
&gt; &gt; @@ -3176,7 +3176,8 @@ void radio_remove_works(struct wpa_supplicant<br>
&gt; &gt; *wpa_s,<br>
&gt; &gt;<br>
&gt; &gt;       dl_list_for_each_safe(work, tmp, &amp;radio-&gt;work, struct<br>
&gt; &gt; wpa_radio_work,<br>
&gt; &gt;                             list) {<br>
&gt; &gt; -             if (type &amp;&amp; os_strcmp(type, work-&gt;type) != 0)<br>
&gt; &gt; +             if (work-&gt;wpa_s &amp;&amp; work-&gt;wpa_s-&gt;radio &amp;&amp; type &amp;&amp;<br>
&gt; &gt; +                             os_strcmp(type, work-&gt;type) != 0)<br>
&gt; &gt;                       continue;<br>
&gt; &gt;<br>
&gt; &gt;               /* skip other ifaces&#39; works */<br>
&gt; &gt; --<br>
&gt; &gt; 1.8.3.2<br>
&gt; &gt;<br>
</div></div><div class="HOEnZb"><div class="h5">---------------------------------------------------------------------<br>
A member of the Intel Corporation group of companies<br>
<br>
This e-mail and any attachments may contain confidential material for<br>
the sole use of the intended recipient(s). Any review or distribution<br>
by others is strictly prohibited. If you are not the intended<br>
recipient, please contact the sender and delete all copies.<br>
<br>
</div></div></blockquote></div><br></div>