Re: SQLFreeHandle hang

J Jayavasanthan <[email protected]> Wed, 27 May 2009 16:56:50 +0530
Newsgroups gmane.comp.db.mysql.odbc
Message-ID <[email protected]>
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]
>
>


-- 
first me then home
first home then country
first country then world
fools always read inverse