List:MySQL++« Previous MessageNext Message »
From:Simon Pickles Date:December 31 2007 5:46pm
Subject:Re: Lock Failed Exception
View as plain text  
Thanks Warren, very good advice as always.

Linux user #458601 - http://counter.li.org.



Warren Young wrote:
> Simon Pickles wrote:
>>
>> What is the cause of a "lock failed" mysqlpp exception, 
>
> It means you're overlapping uses of either Connection or Query in a 
> way that would cause run-time failures if the library didn't catch it 
> first.
>
> Be warned, we no longer bother catching such errors in v3.
>
>> what is the best approach for dealing with it?  
>
> Pretty much the same as the advice for using MySQL++ safely in a 
> multithreaded program:
>
>     http://tangentsoft.net/mysql++/test/doc/userman/threads.html
>
> If your program already *is* multithreaded, so much the more important 
> that you follow the user manual's advice.
>
>>    template <class Type> void Select( std::vector<Type>& results,
> 
>> const std::string& table, const std::string& where = "" )
>>    {
>>        m_sql = "SELECT * FROM ";
>
> I'm guessing m_sql is a member variable of some class?  Why is it not 
> just a local variable to this function?  This kind of loose data 
> visibility is the sort of thing that leads to the problem you're 
> reporting.
>
>>            catch (const mysqlpp::Exception& er)
>>            {
>>                // Catch-all for any other MySQL++ exceptions
>>                if ( strcmp( er.what(), "lock failed" ) == 0 )
>>                {
>>                    g_log->ERROR("Database Error: %s... retrying\n", 
>> er.what() );
>>                    continue;
>>                }
>
> It would be far better to just catch LockFailed here.
>
> Testing exceptions based on the text of what() makes your code 
> vulnerable to failures you can only catch at run time after upgrading 
> MySQL++, if we change one of the error message strings.  Besides, the 
> code to catch the correct exception would probably run faster than 
> this strcmp stuff on the generic exception.
>


Thread
Lock Failed ExceptionSimon Pickles29 Dec
Re: Lock Failed ExceptionWarren Young31 Dec
  • Re: Lock Failed ExceptionSimon Pickles31 Dec