List:Commits« Previous MessageNext Message »
From:Davi Arnaut Date:April 26 2009 4:41pm
Subject:Re: bzr commit into mysql-6.0-bugteam branch (holyfoot:3224) Bug#37774
View as plain text  
Hi Alexey,

On 4/22/09 4:30 AM, Alexey Botchkov wrote:
> #At file:///home/hf/work/mysql_common/37774/ based on
> revid:alfranio.correia@stripped
>
>   3224 Alexey Botchkov	2009-04-22
>        Bug#37774      main.events_bugs fails sporadically
>            get_lock() function can crash the system when used inside the event
> handler.
>            the interruptible_wait() function used in the implementation calls
>            thd->vio_is_connected() in some circumstances and this method leads to
>            crash when the thread doesn't have an real connection (thd->net.vio is
> NULL).
>
>            Fixed by checking that thd->net.vio isn't NULL.
>

[..]

> === modified file 'sql/item_func.cc'
> --- a/sql/item_func.cc	2009-04-08 23:46:45 +0000
> +++ b/sql/item_func.cc	2009-04-22 07:24:13 +0000
> @@ -3540,7 +3540,7 @@ static int interruptible_wait(THD *thd,
>       if (error == ETIMEDOUT || error == ETIME)
>       {
>         /* Return error if timed out or connection is broken. */
> -      if (!timeout || !thd->vio_is_connected())
> +      if (!timeout || (thd->net.vio&&  !thd->vio_is_connected()))
>           break;
>       }
>     } while (error&&  timeout);
>

Hum, this scenario looks fishy. The thread was sleeping on a condition 
variable, timed out and found out that its connection has been closed. 
This sounds more like a race condition waiting to happen... a race 
between the time of the check and of pointer dereference.

How does vio becomes null? the thread is killed or something else?

Regards,

-- Davi Arnaut
Thread
bzr commit into mysql-6.0-bugteam branch (holyfoot:3224) Bug#37774Alexey Botchkov22 Apr
  • Re: bzr commit into mysql-6.0-bugteam branch (holyfoot:3224) Bug#37774Davi Arnaut26 Apr
    • Re: bzr commit into mysql-6.0-bugteam branch (holyfoot:3224) Bug#37774Davi Arnaut26 Apr