ID: 17012 Updated by: [EMAIL PROTECTED] Reported By: [EMAIL PROTECTED] Status: Open Bug Type: COM related Operating System: WinNT 2000 PHP Version: 4.2.0 New Comment:
The fix would be fine but the actual question is 'shouldn't they addref it?' afaik one should call addref each time an idispatch pointer is obtained from somewhere and as we give it away _they_ (ADODB) obtain it and should addref the pointer themselfes. but during investigation i found some other flaws, maybe your problem is related to them. Previous Comments: ------------------------------------------------------------------------ [2002-05-05 08:38:39] [EMAIL PROTECTED] hello I wrote a script to access ADO database: ---------------------------------------------------- $conn = new COM('ADODB.Connection'); $hr = $conn->Open('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb',"", "", 0); $oCmd = new COM('ADODB.Command'); $oCmd->ActiveConnection = $conn; $oCmd->CommandText = "INSERT INTO config(storage) VALUES('testowa wartosc')"; $oCmd->CommandType = 1; $rs = $oCmd->Execute(); ---------------------------------------------------- in line $oCmd->ActiveConnection = $conn; there is created a zendval variable (result from assigning IDispatch $conn to property) but $conn is not AddRef-ed... When this invisible variable is destroyed it calls Release on IDispatch from $conn - But this dispatch is already 0-referenced. I isolated the code in file COM.c in line 1142 (function do_COM_propput): --------------------------------------------------- if (SUCCEEDED(hr)) { php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC); } else { -------------------------------------------------- and changed to: --------------------------------------------------- if (SUCCEEDED(hr)) { if ( var_result->vt == VT_DISPATCH ) var_result->pdispVal->lpVtbl->AddRef(var_result->pdispVal); php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC); } else { ---------------------------------------------------- Is it a good solution? Or maybe I don't understand something? Tristan Rybak ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=17012&edit=1