Hi Andrew,

On 11/21/2010 10:43 PM, Andrzej Zaborowski wrote:
> There's a small probability that we call chat_wakeup_writer
> just before the channel disonnects and for some reason glib then
> calls can_write_data after we have unrefed the io and freed all the
> resources.  Calling at_chat_suspend unsubscribes can_write_data
> from the io.
> ---
>  gatchat/gatchat.c |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
> 
> diff --git a/gatchat/gatchat.c b/gatchat/gatchat.c
> index 218f592..957181c 100644
> --- a/gatchat/gatchat.c
> +++ b/gatchat/gatchat.c
> @@ -40,6 +40,7 @@
>  
>  struct at_chat;
>  static void chat_wakeup_writer(struct at_chat *chat);
> +static void at_chat_suspend(struct at_chat *chat);

This is really against the coding standard ;)

>  
>  static const char *none_prefix[] = { NULL };
>  
> @@ -364,6 +365,7 @@ static void io_disconnect(gpointer user_data)
>       struct at_chat *chat = user_data;
>  
>       chat_cleanup(chat);
> +     at_chat_suspend(chat);
>       g_at_io_unref(chat->io);
>       chat->io = NULL;
>  

Actually I think the right fix is to remove the write watcher in
io_shutdown.

I pushed an experimental patch 99107c6c9d0ae42eb96621b0fc34972e418f1755,
please let me know if this fixes the issue.

Regards,
-Denis
_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono

Reply via email to