[PATCH] huawei: handle pending network-initiated disconnection in disconnect_3gpp

Aleksander Morgado aleksander at lanedo.com
Thu Oct 24 07:44:41 PDT 2013


On 10/24/2013 04:44 PM, Dan Williams wrote:
> On Thu, 2013-10-24 at 02:30 -0700, Ben Chan wrote:
>> If a client-initiated disconnection attempt is issued while a
>> network-initiated disconnection is still pending, the latter may
>> interfere with the former. Also, when the client-initiated disconnection
>> attempt fails but the bearer status is reported as 'disconnected', the
>> pending network-initiated disconnection is not cleared and may result
>> in an assertion when a connection attempt is issued.
>>
>> This patch addresses the issue by clearing any pending network-initiated
>> disconnection before proceeding with a client-initiated disconnection.
> 
> Looks good to me.
> 

Pushed to git master then;

Cheers!


> Dan
> 
>> ---
>>  plugins/huawei/mm-broadband-bearer-huawei.c | 13 ++++++++-----
>>  1 file changed, 8 insertions(+), 5 deletions(-)
>>
>> diff --git a/plugins/huawei/mm-broadband-bearer-huawei.c b/plugins/huawei/mm-broadband-bearer-huawei.c
>> index deb91ca..1b9c0ff 100644
>> --- a/plugins/huawei/mm-broadband-bearer-huawei.c
>> +++ b/plugins/huawei/mm-broadband-bearer-huawei.c
>> @@ -551,6 +551,14 @@ disconnect_3gpp_context_step (Disconnect3gppContext *ctx)
>>          /* Store the context */
>>          ctx->self->priv->disconnect_pending = ctx;
>>  
>> +        /* We ignore any pending network-initiated disconnection in order to prevent it
>> +         * from interfering with the client-initiated disconnection, as we would like to
>> +         * proceed with the latter anyway. */
>> +        if (ctx->self->priv->network_disconnect_pending_id != 0) {
>> +            g_source_remove (ctx->self->priv->network_disconnect_pending_id);
>> +            ctx->self->priv->network_disconnect_pending_id = 0;
>> +        }
>> +
>>          ctx->step++;
>>          /* Fall down to the next step */
>>  
>> @@ -605,11 +613,6 @@ disconnect_3gpp_context_step (Disconnect3gppContext *ctx)
>>          return;
>>  
>>      case DISCONNECT_3GPP_CONTEXT_STEP_LAST:
>> -        if (ctx->self->priv->network_disconnect_pending_id != 0) {
>> -            g_source_remove (ctx->self->priv->network_disconnect_pending_id);
>> -            ctx->self->priv->network_disconnect_pending_id = 0;
>> -        }
>> -
>>          /* Clear context */
>>          ctx->self->priv->disconnect_pending = NULL;
>>          /* Set data port as result */
> 


-- 
Aleksander


More information about the ModemManager-devel mailing list