Re: SQLFreeHandle hang

J Jayavasanthan <[email protected]> Fri, 29 May 2009 18:08:41 +0530
Newsgroups gmane.comp.db.mysql.odbc
Message-ID <[email protected]>
Hi All,
As per Nick's suggestion, we downloaded the latest pre-release build from
unixodbc and were able to resolve our issues,

Now we are able to use Threading=0 as well as Connection Pooling without any
errors,

Thanks for Nick and Martin for all their help,

Best Regards,
Jay

On Wed, May 27, 2009 at 4:56 PM, J Jayavasanthan <[email protected]>wrote:

> Hi Martin,
> Thanks for your inputs, I was trying out Threading=0 initially, but I
> wanted to make sure I am not breaking anything, so I wanted to make sure
> every code is working fine.
>
> In the above test, I have a code which connects the database, executes a
> few queries and then closes the database connection, and then creates
> another new connection and executes a few queries and then closes the
> connection -> All in single thread. This was a standard app code and I have
> checked that all structures are freed properly.
>
> If connection pooling is enabled, when I close the second connection I am
> getting the hang. Hence, I tried out various options like Threading=1/2 as
> well. Then we found out that when connection pooling is disabled, the
> problem is not faced. Hence I posted the above error.
>
> I am willing to go with Threading=0 but I would have to have the connection
> pooling enabled as the way my application works with the database, the
> pooled connections will be needed for better performance of the app.
>
> I am currently trying out Nick's suggestion, I will let you know if the
> problem is resolved and what I have done to resolve the issues.
>
> BTW, Thanks for all your help in resolving my errors,
>
> Best Regards,
> Jay
>
>
> On Wed, May 27, 2009 at 4:36 PM, Martin Evans <[email protected]>wrote:
>
>> J Jayavasanthan wrote:
>> > Hi,
>> > My Application hangs on my second call to SQLFreeHandle's
>> 'thread_protect(
>> > SQL_HANDLE_ENV, environment );' line when I use the Threading option as
>> > 0/1/2. When I use Threading=3 the default it works fine.
>> >
>> > For the above test I had ConnectionPooling enabled.
>> >
>> > When I disable ConnectionPooling, the SQLFreeHandle with Threading=0/1/2
>> the
>> > hang doesn't happen. Is this a bug in configuration or am I missing
>> > something. My code is tuned to use the same Environment across
>> connections,
>> > do let me know how I could avoid this,
>> >
>> > Regards,
>> > Jay
>> >
>>
>> Some people on this list may be surprised/confused where you are now as
>> you did not close your previous thread by saying that what I previously
>> suggested to you worked - namely looking at add Threading option to your
>> ODBC driver configuration. It is generally good practise if you start a
>> thread and find a resolution to post back explaining how you resolved
>> the problem so others can see the solution.
>>
>> Threading = 0 all thread protection in the ODBC driver manager for the
>> ODBC driver is turned off - unxiODBC will only protect its own internal
>> structures.
>>
>> Threading = 1 protects down to the statement level
>>
>> Threading = 2 protects down to the connection level
>>
>> Threading = 3 protects down to the environment level
>>
>> IF you ODBC driver is thread-safe you can set Threading to 0.
>> On the other hand if you are unsure if your driver is thread-safe but
>> threads only share the environment you can use Threading = 3. If you are
>> unsure your driver is thread-safe and threads share connections you need
>> to use 2 etc.
>>
>> A hang almost definitely suggests something is protecting some structure
>> and another thread is attempting to get the same resource and vice versa.
>>
>> You say you share environments across threads so you should either use 0
>> (meaning you are saying your ODBC driver is thread-safe and unixODBC
>> should only protect itself) or 3 meaning unixODBC will stop multiple
>> threads using the same environment at the same time.
>>
>> If you set threading to 1 or 2 and multiple threads attempt to use the
>> same connection or statement you will get problems.
>>
>> If you are definitely saying setting Threading = 0 and you still get a
>> problem in thread_protect when using connection pooling I suggest you
>> report this on one of the unixodbc mailing lists which you can find from
>> www.unixodbc.org.
>>
>> Martin
>> --
>> Martin J. Evans
>> Easysoft Limited
>> http://www.easysoft.com
>>
>> --
>> MySQL ODBC Mailing List
>> For list archives: http://lists.mysql.com/myodbc
>> To unsubscribe:
>> http://lists.mysql.com/[email protected]
>>
>