<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
        {font-family:Verdana;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Verdana-Bold;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
span.EmailStyle21
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle22
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle23
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle24
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle25
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1027" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="color:#1F497D">I think we should expose this static method in C# in FDO 3.8 release
</span><span style="font-family:Wingdings;color:#1F497D">J</span><span style="color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Romy<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> fdo-users-bounces@lists.osgeo.org [mailto:fdo-users-bounces@lists.osgeo.org]
<b>On Behalf Of </b>Greg Boone<br>
<b>Sent:</b> Thursday, February 16, 2012 2:41 PM<br>
<b>To:</b> FDO Users Mail List<br>
<b>Subject:</b> RE: [fdo-users] .NET Connection Pooling<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Your code segment looks ok, but I have not tried executing it in that manner.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">It is not included in the C# API.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Greg<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> fdo-users-bounces@lists.osgeo.org [mailto:fdo-users-bounces@lists.osgeo.org]
<b>On Behalf Of </b>Kyle Fransham<br>
<b>Sent:</b> Thursday, February 16, 2012 2:32 PM<br>
<b>To:</b> 'FDO Users Mail List'<br>
<b>Subject:</b> RE: [fdo-users] .NET Connection Pooling<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span lang="EN-CA" style="color:#1F497D">Hi Greg,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA" style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA" style="color:#1F497D">Great, thanks for the quick answer. So, to call the function from C#, I would do something like:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA" style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">[<span style="color:#2B91AF">DllImport</span>(<span style="color:#A31515">"FDOCommon.dll"</span>)]<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas;color:blue">public</span><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">static</span> <span style="color:blue">extern</span> <span style="color:blue">
void</span> EnableGlobalThreadLocking(<span style="color:blue">bool</span> enabled);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">Correct? Or is it already included somewhere in the C# provider?<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">Kyle<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">
<a href="mailto:fdo-users-bounces@lists.osgeo.org">fdo-users-bounces@lists.osgeo.org</a>
<a href="mailto:[mailto:fdo-users-bounces@lists.osgeo.org]">[mailto:fdo-users-bounces@lists.osgeo.org]</a>
<b>On Behalf Of </b>Greg Boone<br>
<b>Sent:</b> February-16-12 13:50<br>
<b>To:</b> FDO Users Mail List<br>
<b>Subject:</b> RE: [fdo-users] .NET Connection Pooling<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Hi Kyle,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Yes, this is a known issue. Using, and later disposing, FDO objects across multiple threads can lead to an exception.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">When you application starts up, what you need to invoke is the following method (C++)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<pre style="background:white"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> FdoIDisposable:EnableGlobalThreadLocking(true);<o:p></o:p></span></pre>
<p class="MsoNormal" style="background:white"><span style="color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="color:#1F497D">Located in: ….\FDO\Fdo\Unmanaged\Inc\Common\IDisposable.h<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="color:#1F497D">Regards,<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="color:#1F497D">Greg<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">
<a href="mailto:fdo-users-bounces@lists.osgeo.org">fdo-users-bounces@lists.osgeo.org</a>
<a href="mailto:[mailto:fdo-users-bounces@lists.osgeo.org]">[mailto:fdo-users-bounces@lists.osgeo.org]</a>
<b>On Behalf Of </b>Kyle Fransham<br>
<b>Sent:</b> Thursday, February 16, 2012 1:09 PM<br>
<b>To:</b> <a href="mailto:fdo-users@lists.osgeo.org">fdo-users@lists.osgeo.org</a><br>
<b>Subject:</b> [fdo-users] .NET Connection Pooling<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span lang="EN-CA">Hello,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA">I’m trying to implement a connection pool for a C# .NET project that uses FDO backed by MySQL 5.5, and I’m running into a bit of trouble. I have a static pool of OSGeo.FDO.Connection.IConnection objects that I pass off
to threads as they request them. When the thread is done with the connection, it returns it to the pool.
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA">Before the pool gives out a connection, it does a simple check by issuing a “SELECT 1” and if all is well, the connection gets sent out. If the command fails, the connection is closed, and the next connection in the
pool is tested. If there are no valid connections in the pool, a new one is leased out. This all works fine, for a while. After a period of time, though, my app pool throws an unhandled exception that I believe is coming from the finalize thread. All
of my statements are encased in try-catch blocks, so I think that there is some object that’s being disposed of by the garbage collector that’s causing the error to occur. But I’m not sure.
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA">I’ve appended the exception and the code for the connection pool to this e-mail… Does anyone see if I’m doing something completely wrong? Any suggestions on what to try next?<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA">Thanks in advance,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA">Kyle Fransham<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA">******************************************************************<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA">Here is the exception that I see in the debugger:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA">Message: “Connection not established”<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA">Stack Trace: <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"> at OSGeo.FDO.Runtime.Disposable.ReleaseUnmanagedObject()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"> at OSGeo.FDO.Runtime.Disposable.!Disposable()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"> at OSGeo.FDO.Runtime.Disposable.Dispose(Boolean )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"> at OSGeo.FDO.Runtime.Disposable.Finalize()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA">*******************************************************************<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA">Here is the connection pool code:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas;color:blue">using</span><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> System;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas;color:blue">using</span><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> System.Collections.Concurrent;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas;color:blue">using</span><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> System.Linq;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas;color:blue">using</span><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> System.Web;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas;color:blue">using</span><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> OSGeo.FDO.Connections;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas;color:blue">using</span><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> System.Security.Permissions;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas;color:blue">using</span><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> System.Threading;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas;color:blue">namespace</span><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> GVFFDOProvider<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">{<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">public</span> <span style="color:blue">sealed</span> <span style="color:blue">
class</span> <span style="color:#2B91AF">ConnectionPool</span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas;color:blue"> #region</span><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> Member Variables<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">private</span> <span style="color:blue">static</span> <span style="color:blue">
readonly</span> <span style="color:blue">int</span> n_cached_connections =<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:#2B91AF">Convert</span>.ToInt32(Properties.<span style="color:#2B91AF">Settings</span>.Default.number_of_cached_connections);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">private</span> <span style="color:#2B91AF">ConcurrentQueue</span><<span style="color:#2B91AF">IConnection</span>> pool;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">private</span> <span style="color:#2B91AF">GVFInterfaces</span> m_gvfinterfaces =<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:#2B91AF">GVFInterfaces</span>.CreateInstance(<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> <span style="color:#2B91AF">AppDomain</span>.CurrentDomain.BaseDirectory +
<span style="color:#A31515">"GVFExceptionLog.txt"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas;color:blue"> #endregion</span><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas;color:blue"> #region</span><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> Constructors<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:gray">///</span><span style="color:green"> </span><span style="color:gray"><summary></span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:gray">///</span><span style="color:green"> The following class implements a thread-safe singleton pattern.</span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:gray">///</span><span style="color:green"> </span><span style="color:gray"></summary></span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">private</span> <span style="color:blue">static</span> <span style="color:blue">
readonly</span> <span style="color:#2B91AF">ConnectionPool</span> instance = <span style="color:blue">
new</span> <span style="color:#2B91AF">ConnectionPool</span>();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">private</span> ConnectionPool()<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> pool =
<span style="color:blue">new</span> <span style="color:#2B91AF">ConcurrentQueue</span><<span style="color:#2B91AF">IConnection</span>>();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">for</span> (<span style="color:blue">int</span> i = 0; i < n_cached_connections; i++)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> pool.Enqueue(GetNewConnection());<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">public</span> <span style="color:blue">static</span> <span style="color:#2B91AF">
ConnectionPool</span> Instance<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">get</span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">return</span> instance;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas;color:blue"> #endregion</span><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas;color:blue"> #region</span><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> Private Functions<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">private</span> <span style="color:blue">bool</span> ConnectionIsAlive(<span style="color:#2B91AF">IConnection</span> connection)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">try</span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">if</span> (m_gvfinterfaces.TestConnection(connection))<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">return</span> <span style="color:blue">true</span>;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> connection.Close();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">catch</span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:green">// Connection is closed. Return false;</span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">return</span> <span style="color:blue">false</span>;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">private</span> <span style="color:#2B91AF">IConnection</span> GetNewConnection()<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">return</span> m_gvfinterfaces<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> .GetConnection(Properties.<span style="color:#2B91AF">Settings</span>.Default.fdo_user,<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> Properties.<span style="color:#2B91AF">Settings</span>.Default.fdo_password,<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> Properties.<span style="color:#2B91AF">Settings</span>.Default.fdo_service,<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> Properties.<span style="color:#2B91AF">Settings</span>.Default.fdo_datastore,<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">false</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas;color:blue"> #endregion</span><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas;color:blue"> #region</span><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> Public Functions<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:gray">///</span><span style="color:green"> </span><span style="color:gray"><summary></span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:gray">///</span><span style="color:green"> Gets a connection from the pool if one is available and alive,</span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:gray">///</span><span style="color:green"> or returns a new connection.</span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:gray">///</span><span style="color:green"> </span><span style="color:gray"></summary></span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:gray">///</span><span style="color:green"> </span><span style="color:gray"><returns></returns></span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">public</span> <span style="color:#2B91AF">IConnection</span> GetConnection()<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:#2B91AF">IConnection</span> connection;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">try</span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">while</span> (pool.Count() > 0)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">if</span> (pool.TryDequeue(<span style="color:blue">out</span> connection) && ConnectionIsAlive(connection))<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">return</span> connection;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">catch</span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:green">// Do nothing, just return a new connection. </span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">return</span> GetNewConnection();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:gray">///</span><span style="color:green"> </span><span style="color:gray"><summary></span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:gray">///</span><span style="color:green"> Returns a connection to the pool.</span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:gray">///</span><span style="color:green"> </span><span style="color:gray"></summary></span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:gray">///</span><span style="color:green"> </span><span style="color:gray"><param name="connection"></param></span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">public</span> <span style="color:blue">void</span> ReturnConnection(<span style="color:#2B91AF">IConnection</span> connection)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">
<span style="color:blue">if</span> (pool.Count < n_cached_connections && ConnectionIsAlive(connection))<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> pool.Enqueue(connection);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> }
<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas;color:blue"> #endregion</span><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"> }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-CA" style="font-size:9.5pt;font-family:Consolas">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter" />
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0" />
<v:f eqn="sum @0 1 0" />
<v:f eqn="sum 0 0 @1" />
<v:f eqn="prod @2 1 2" />
<v:f eqn="prod @3 21600 pixelWidth" />
<v:f eqn="prod @3 21600 pixelHeight" />
<v:f eqn="sum @0 0 1" />
<v:f eqn="prod @6 1 2" />
<v:f eqn="prod @7 21600 pixelWidth" />
<v:f eqn="sum @8 21600 0" />
<v:f eqn="prod @7 21600 pixelHeight" />
<v:f eqn="sum @10 21600 0" />
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" />
<o:lock v:ext="edit" aspectratio="t" />
</v:shapetype><v:shape id="Picture_x0020_1" o:spid="_x0000_s1026" type="#_x0000_t75" alt="Description: Description: Description: Description: email" href="http://www.superna.net/" style='position:absolute;margin-left:0;margin-top:0;width:95.25pt;height:24.75pt;z-index:251659264;visibility:visible;mso-wrap-style:square;mso-width-percent:0;mso-height-percent:0;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal:absolute;mso-position-horizontal-relative:text;mso-position-vertical:absolute;mso-position-vertical-relative:text;mso-width-percent:0;mso-height-percent:0;mso-width-relative:page;mso-height-relative:page' o:button="t">
<v:imagedata src="cid:image001.png@01CCECB9.5C9475C0" o:title=" email" />
<w:wrap type="square"/>
</v:shape><![endif]--><![if !vml]><a href="http://www.superna.net/"><img border="0" width="127" height="33" src="cid:image003.jpg@01CCECB9.5C9475C0" align="left" hspace="12" alt="Description: Description: Description: Description: email" v:shapes="Picture_x0020_1"></a><![endif]><span lang="EN-CA">KYLE
FRANSHAM</span><b><span lang="EN-CA" style="font-size:8.0pt;font-family:Verdana-Bold;color:#231F20"> Software Developer</span></b><span lang="EN-CA" style="font-size:8.0pt;font-family:"Verdana","sans-serif";color:#231F20"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA" style="font-size:8.0pt;font-family:"Verdana","sans-serif";color:#231F20">613-729-1100 ext. 330 (w) |
</span><u><span lang="EN-CA" style="font-size:8.0pt;font-family:"Verdana","sans-serif";color:black"><a href="http://www.superna.net/">www.superna.net</a></span></u><span lang="EN-CA" style="color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:10.0pt;color:#E36C0A">Superna
</span></b><span style="font-size:10.0pt">is located at 300 Terry Fox Drive, Unit 700, Kanata, Ontario K2K 0E3.<b><span style="color:#E36C0A"><o:p></o:p></span></b></span></p>
<div class="MsoNormal" align="center" style="text-align:center"><span lang="EN-CA" style="font-size:8.0pt;color:black">
<hr size="2" width="100%" align="center">
</span></div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:8.0pt;color:black">CONFIDENTIALITY NOTICE</span></b><span style="font-size:8.0pt;color:black">: The information contained in this email is privileged and
confidential and intended only for the use of the individual or entity to whom it is addressed. If you are not the intended recipient, you are hereby notified that any distribution, copying, or disclosure or taking of any action in reliance on the contents
of this transmission is strictly prohibited and review by any individual other than the intended recipient shall not constitute waiver of privilege. If you receive this message in error, please notify the sender immediately at 613-729-1100 and destroy the
original message and all copies. Thank you.</span><span style="font-size:8.0pt"><o:p></o:p></span></p>
<div class="MsoNormal" align="center" style="text-align:center"><span style="font-size:8.0pt">
<hr size="2" width="100%" align="center">
</span></div>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
</div>
</div>
</body>
</html>