COM Dlls not unbinding
| From: | Alex Turner | Date: | Sat, 31 Dec 2005 16:17:08 +0000 |
| Subject: | COM Dlls not unbinding | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-228064@lists.php.net to get a copy of this message | ||
Hi All,
I am doing a lot of PHP work with COM. The system uses php 4.3.3.3 and php is being driven via FCGI
from our own web server (TAG).
We create an instance of an in-process COM server using the following technique:
function GetFactory()
{
static $obj;
static $objSet = 0;
if($objSet==0)
{
$obj=new COM("TPN_Obj.JDCom_Factory");
$objSet=-1;
}
return $obj;
}
The returned COM object is then used as a factory to all our other COM objects.
The snag is that the binding to the COM dll is not being released at the end of script execution.
This is visible using ProcessExplorer from SysInternals.
If I call com_release the returned ref-count is zero. To ensure that php's garbage collector
was not the culprit, I tried repeatedly calling com_release at the end of the script - no change.
The upshot of this issue is that each PHP process in the FCGI process pool gradually gets bigger as
more and more dlls are bound :-(
Any ideas are welcome; I have gone through the php source but cannot quite figure the problem.
Changing the C code is OK for our application.
Thanks!
Dr Alexander J Turner
Project Network
+44 (0) 7917 065072
Con Call: 0870 241 3425/3342654#